home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / clang / netclb23.zip / NETWARE.TXT < prev    next >
Text File  |  1994-05-20  |  263KB  |  6,153 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.          ╔═════════════════════════════════════════════════════════╗
  17.          ║                                                         ║
  18.          ║                    Netware C Library                    ║
  19.          ║                                                         ║
  20.          ║                       Version 2.3                       ║
  21.          ║                                                         ║
  22.          ║                    Reference  Manual                    ║
  23.          ║                                                         ║
  24.          ║       Copyright (c)  Adrian M. Cunnelly 1992-1994       ║
  25.          ║                                                         ║
  26.          ║            Internet: adrian@amcsoft.demon.co.uk         ║
  27.          ║          Compuserve: 100031,222                         ║
  28.          ║                                                         ║
  29.          ╚═════════════════════════════════════════════════════════╝
  30.  
  31.  
  32.  
  33. Netware C Library                                                     Contents-1
  34. ────────────────────────────────────────────────────────────────────────────────
  35.  
  36.     1. Introduction.........................................1-1
  37.  
  38.         1.1  General Information............................1-1
  39.         1.2  Registration Information.......................1-1
  40.         1.3  Disclaimer.....................................1-1
  41.         1.4  Future Enhancements............................1-1
  42.         1.5  Change History.................................1-2
  43.         1.6  Function Summary...............................1-3
  44.         1.7  Netware Data Types.............................1-6
  45.  
  46.     2. Bindery Services.....................................2-1
  47.  
  48.         2.1  Bindery Objects................................2-1
  49.  
  50.             2.1.1  Object Type .............................2-1
  51.             2.1.2  Object Name..............................2-2
  52.             2.1.3  Object Flag..............................2-2
  53.             2.1.4  Object Security..........................2-2
  54.             2.1.5  Properties Flag..........................2-2
  55.  
  56.         2.2  Properties and their values....................2-2
  57.  
  58.             2.2.1  Property Name............................2-2
  59.             2.2.2  Property Flag............................2-3
  60.             2.2.3  Property Security........................2-3
  61.             2.2.4  Property Values Flag.....................2-3
  62.  
  63.         2.3  Bindery Functions..............................2-3
  64.  
  65.             2.3.1   AddBinderyObjectToSet...................2-3
  66.             2.3.2   ChangeBinderyObjectPassword.............2-4
  67.             2.3.3   ChangeBinderyObjectSecurity.............2-4
  68.             2.3.4   ChangePropertySecurity..................2-4
  69.             2.3.5   CloseBindery............................2-4
  70.             2.3.6   CreateBinderyObject.....................2-5
  71.             2.3.7   CreateProperty..........................2-5
  72.             2.3.8   DeleteBinderyObjectFromSet..............2-5
  73.             2.3.9   DeleteBinderyObject.....................2-6
  74.             2.3.10  DeleteProperty..........................2-6
  75.             2.3.11  GetBinderyAccessLevel...................2-6
  76.             2.3.12  GetBinderyObjectID......................2-6
  77.             2.3.13  GetBinderyObjectName....................2-7
  78.             2.3.14  IsBinderyObjectInSet....................2-7
  79.             2.3.15  OpenBindery.............................2-7
  80.             2.3.16  ReadPropertyValue.......................2-8
  81.             2.3.17  RenameBinderyObject.....................2-8
  82.             2.3.18  ScanBinderyObject.......................2-9
  83.             2.3.19  ScanProperty............................2-9
  84.             2.3.20  VerifyBinderyObjectPassword.............2-10
  85.             2.3.21  VerifyObjectPasswordEncrypted...........2-10
  86.             2.3.22  WritePropertyValue......................2-11
  87.  
  88.     3.  File Server Environment Services....................3-1
  89.  
  90.         3.1  File Server Environment Functions..............3-1
  91.  
  92.                                                                                 
  93. Netware C Library                                                     Contents-2
  94. ────────────────────────────────────────────────────────────────────────────────
  95.  
  96.             3.1.1   CheckConsolePrivileges..................3-1
  97.             3.1.2   ClearConnectionNumber...................3-1
  98.             3.1.3   DisableFileServerLogin..................3-1
  99.             3.1.4   DisableTransactionTracking..............3-1
  100.             3.1.5   DownFileServer..........................3-2
  101.             3.1.6   EnableFileServerLogin...................3-2
  102.             3.1.7   EnableTransactionTracking...............3-2
  103.             3.1.8   EncryptPassword.........................3-2
  104.             3.1.9   GetBinderyObjectDiskSpaceLeft...........3-3
  105.             3.1.10  GetConnectionsOpenFiles.................3-3
  106.             3.1.11  GetConnectionsUsageStatistics...........3-5
  107.             3.1.12  GetDiskCacheStatistics..................3-5
  108.             3.1.13  GetDiskUtilisation......................3-5
  109.             3.1.14  GetFileServerDateTime...................3-6
  110.             3.1.15  GetFileServerInformation................3-6
  111.             3.1.16  GetFileServerLoginStatus................3-6
  112.             3.1.17  GetNetworkSerialNumber..................3-7
  113.             3.1.18  GetPathFromDirectoryEntry...............3-7
  114.             3.1.19  GetPhysicalDiskStatistics...............3-7
  115.             3.1.20  GetSemaphoreInformation.................3-8
  116.             3.1.21  SendConsoleBroadcast....................3-8
  117.  
  118.     4.  Connection Services.................................4-1
  119.  
  120.         4.1  Connection Functions...........................4-1
  121.  
  122.             4.1.1   AttachToFileServer......................4-1
  123.             4.1.2   DetachFromFileServer....................4-1
  124.             4.1.3   EnterLoginArea..........................4-1
  125.             4.1.4   GetConnectionInformation................4-2
  126.             4.1.5   GetConnectionNumber.....................4-2
  127.             4.1.6   GetInternetAddress......................4-2
  128.             4.1.7   GetObjectConnectionNumbers..............4-3
  129.             4.1.8   GetStationAddress.......................4-3
  130.             4.1.9   LoginObjectEncrypted....................4-3
  131.             4.1.10  LoginToFileServer.......................4-4
  132.             4.1.11  LogoutFromFileServer....................4-4
  133.             4.1.12  Logout..................................4-4
  134.  
  135.     5.  Workstation Services................................5-1
  136.  
  137.         5.1  Multiple Servers...............................5-1
  138.  
  139.         5.2  Workstation Functions..........................5-1
  140.  
  141.             5.2.1   EndOfJob................................5-1
  142.             5.2.2   GetConnectionIDTable....................5-1
  143.             5.2.3   GetDefaultConnectionID..................5-2
  144.             5.2.4   GetDriveConnectionID....................5-2
  145.             5.2.5   GetDriveFlagTable.......................5-2
  146.             5.2.6   GetDriveHandleTable.....................5-2
  147.             5.2.7   GetFileServerTable......................5-3
  148.             5.2.8   GetNetwareShellVersion..................5-3
  149.             5.2.9   GetNumberOfLocalDrives..................5-3
  150.             5.2.10  GetPreferredConnectionID................5-3
  151.             5.2.11  GetPrimaryConnectionID..................5-4
  152.                                                                                 
  153. Netware C Library                                                     Contents-3
  154. ────────────────────────────────────────────────────────────────────────────────
  155.  
  156.             5.2.12  GetServerConnectionID...................5-4
  157.             5.2.13  IsShellLoaded...........................5-4
  158.             5.2.14  SetEndofJobStatus.......................5-4
  159.             5.2.15  SetNWErrorMode..........................5-5
  160.             5.2.16  SetPreferredConnectionID................5-5
  161.             5.2.17  SetPrimaryConnectionID..................5-5
  162.  
  163.     6.  Message Services....................................6-1
  164.  
  165.         6.1  Message Functions..............................6-1
  166.  
  167.             6.1.1   BroadcastToConsole......................6-1
  168.             6.1.2   CheckPipeStatus.........................6-1
  169.             6.1.3   CloseMessagePipe........................6-2
  170.             6.1.4   GetBroadcastMessage.....................6-2
  171.             6.1.5   GetBroadcastMode........................6-3
  172.             6.1.6   GetPersonalMessage......................6-3
  173.             6.1.7   LogNetworkMessage.......................6-4
  174.             6.1.8   OpenMessagePipe.........................6-4
  175.             6.1.9   SendBroadcastMessage....................6-4
  176.             6.1.10  SendPersonalMessage.....................6-5
  177.             6.1.11  SetBroadcastMode........................6-6
  178.  
  179.     7.  File Services.......................................7-1
  180.  
  181.         7.1  Directory Handles..............................7-1
  182.         7.2  Search Attributes..............................7-1
  183.         7.3  File Attributes................................7-1
  184.         7.4  Extended File Attributes.......................7-2
  185.         7.5  File Functions.................................7-2
  186.  
  187.             7.5.1   EraseFiles..............................7-2
  188.             7.5.2   PurgeAllErasedFiles.....................7-3
  189.             7.5.3   PurgeErasedFiles........................7-3
  190.             7.5.4   ScanFileInformation.....................7-3
  191.  
  192.     8.  Directory Services..................................8-1
  193.  
  194.         8.1  Directory Handle Table.........................8-1
  195.         8.2  Drive Handle Table.............................8-1
  196.         8.3  Drive Flag Table...............................8-1
  197.         8.4  Drive Connection ID Table......................8-2
  198.         8.5  Trustee Rights Mask............................8-2
  199.         8.6  Directory Functions............................8-2
  200.  
  201.             8.6.1   AddTrusteeToDirectory...................8-2
  202.             8.6.2   AllocPermanentDirectoryHandle...........8-3
  203.             8.6.3   AllocTemporaryDirectoryHandle...........8-3
  204.             8.6.4   CreateDirectory.........................8-4
  205.             8.6.5   DeallocateDirectoryHandle...............8-4
  206.             8.6.6   DeleteDirectory.........................8-5
  207.             8.6.7   DeleteFakeRoot..........................8-5
  208.             8.6.8   DeleteTrusteeFromDirectory..............8-5
  209.             8.6.9   GetCurrentDirectory.....................8-6
  210.             8.6.10  GetDirectoryHandle......................8-6
  211.             8.6.11  GetDirectoryPath........................8-6
  212.                                                                                 
  213. Netware C Library                                                     Contents-4
  214. ────────────────────────────────────────────────────────────────────────────────
  215.  
  216.             8.6.12  GetEffectiveDirectoryRights.............8-7
  217.             8.6.13  GetVolumeInformation....................8-7
  218.             8.6.14  GetVolumeInfoWithHandle.................8-8
  219.             8.6.15  GetVolumeInfoWithNumber.................8-8
  220.             8.6.16  GetVolumeName...........................8-9
  221.             8.6.17  GetVolumeNumber.........................8-9
  222.             8.6.18  MapFakeRoot.............................8-9
  223.             8.6.19  ModifyMaximumRightsMask.................8-10
  224.             8.6.20  RenameDirectory.........................8-10
  225.             8.6.21  RestoreDirectoryHandle..................8-10
  226.             8.6.22  SaveDirectoryHandle.....................8-11
  227.             8.6.23  ScanBinderyObjectTrusteePaths...........8-11
  228.             8.6.24  ScanDirectoryForTrustees................8-11
  229.             8.6.25  ScanDirectoryInformation................8-12
  230.             8.6.26  SetDirectoryHandle......................8-13
  231.  
  232.     9.  Print Services......................................9-1
  233.  
  234.         9.1  Print Functions................................9-1
  235.  
  236.             9.1.1   CancelLPTCapture........................9-1
  237.             9.1.2   CancelSpecificLPTCapture................9-1
  238.             9.1.3   EndLPTCapture...........................9-1
  239.             9.1.4   EndSpecificLPTCapture...................9-1
  240.             9.1.5   FlushLPTCapture.........................9-2
  241.             9.1.6   FlushSpecificLPTCapture.................9-2
  242.             9.1.7   GetBannerUserName.......................9-2
  243.             9.1.8   GetLPTCaptureStatus.....................9-2
  244.             9.1.9   GetDefaultLocalPrinter..................9-2
  245.             9.1.10  GetDefaultCaptureFlags..................9-3
  246.             9.1.11  GetPrinterStatus........................9-3
  247.             9.1.12  GetSpecificCaptureFlags.................9-3
  248.             9.1.13  SetBannerUserName.......................9-4
  249.             9.1.14  SetCapturePrintQueue....................9-4
  250.             9.1.15  SetDefaultLocalPrinter..................9-4
  251.             9.1.16  SetDefaultCaptureFlags..................9-4
  252.             9.1.17  SetSpecificCaptureFlags.................9-5
  253.             9.1.18  SpecifyCaptureFile......................9-5
  254.             9.1.19  StartLPTCapture.........................9-5
  255.             9.1.20  StartSpecificLPTCapture.................9-5
  256.  
  257.     10.  Synchronisation Services...........................10-1
  258.  
  259.         10.1  Semaphores....................................10-1
  260.         10.2  Synchronisation Functions.....................10-2
  261.  
  262.             10.2.1  CloseSemaphore..........................10-2
  263.             10.2.2  ExamineSemaphore........................10-2
  264.             10.2.3  OpenSemaphore...........................10-2
  265.             10.2.4  SignalSemaphore.........................10-3
  266.             10.2.5  WaitOnSemaphore.........................10-3
  267.  
  268.     11.  Communication Services.............................11-1
  269.  
  270.         11.1  IPX Protocol..................................11-1
  271.  
  272.                                                                                 
  273. Netware C Library                                                     Contents-5
  274. ────────────────────────────────────────────────────────────────────────────────
  275.  
  276.             11.1.1  IPX Packet Structure....................11-1
  277.  
  278.         11.2  SPX Protocol..................................11-2
  279.  
  280.             11.2.1  SPX Packet Structure....................11-2
  281.  
  282.         11.3  Event Control Block (ECB).....................11-4
  283.  
  284.             11.3.1  ECB Structure...........................11-4
  285.  
  286.         11.4  IPX Functions.................................11-7
  287.  
  288.             11.4.1  IPXCancelEvent..........................11-7
  289.             11.4.2  IPXCloseSocket..........................11-7
  290.             11.4.3  IPXDisconnectFromTarget.................11-7
  291.             11.4.4  IPXGetInternetworkAddress...............11-8
  292.             11.4.5  IPXGetIntervalMarker....................11-8
  293.             11.4.6  IPXGetLocalTarget.......................11-8
  294.             11.4.7  IPXInitialise...........................11-8
  295.             11.4.8  IPXListenForPacket......................11-9
  296.             11.4.9  IPXOpenSocket...........................11-9
  297.             11.4.10 IPXRelinquishControl....................11-9
  298.             11.4.11 IPXScheduleIPXEvent.....................11-10
  299.             11.4.12 IPXSendPacket...........................11-10
  300.  
  301.         11.5 SPX Functions..................................11-11
  302.  
  303.             11.5.1  SPXAbortConnection......................11-11
  304.             11.5.2  SPXEstablishConnection..................11-11
  305.             11.5.3  SPXGetConnectionStatus..................11-12
  306.             11.5.4  SPXInitialise...........................11-12
  307.             11.5.5  SPXListenForConnection..................11-12
  308.             11.5.6  SPXListenForSequencedPacket.............11-13
  309.             11.5.7  SPXSendSequencedPacket..................11-14
  310.             11.5.8  SPXTerminateConnection..................11-14
  311.  
  312.     Appendix I    Netware Result Codes......................A1-1
  313.     Appendix II   Function List.............................A2-1
  314.     Appendix III  Data Structures...........................A3-1
  315.  
  316.         A3.1  CONNECTION_ID_TABLE...........................A3-1
  317.         A3.2  DISK_CACHE_STATISTICS.........................A3-3
  318.         A3.3  FILE_SERVER_INFO..............................A3-5
  319.         A3.4  PHYSICAL_DISK_STATISTICS......................A3-6
  320.         A3.5  PRINT_CONTROL_DATA............................A3-8
  321.         A3.6  VOLUME_STATISTICS.............................A3-10
  322.         A3.7  SPX_CONNECTION_STATUS.........................A3-11
  323.  
  324.     Appendix IV   Order Form................................A4-1
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.                                                                                 
  333. Netware C Library          Chapter One - Introduction                  Page: 1-1
  334. ────────────────────────────────────────────────────────────────────────────────
  335.  
  336.                                1. Introduction
  337.  
  338. 1.1 General Information
  339.  
  340.     This  document  and  the  associated   C  libraries  provide  the  network
  341.     programmer with a whole host of functions  for  accessing  Novell  Netware
  342.     Services.   Only the small memory model libraries for Microsoft C, Turbo C
  343.     and Borland C++  are  provided,  but  medium  and  large memory models are
  344.     provided with registration.   The  source  code  is  also  available,  see
  345.     registration below, enabling libraries for other compilers to be produced.
  346.  
  347.     The libraries were  produced  using  Microsoft  C  v6.0,  Turbo C v2.0 and
  348.     Borland C++ v2.0.  All the functions have been tested with Novell Advanced
  349.     Netware 286 v2.15, and some have been tested on Netware 3.11.
  350.  
  351. 1.2 Registration Information
  352.  
  353.     Registration provides the following :-
  354.  
  355.         ■ Latest version of the libraries which will include small, medium and
  356.           large memory models for Microsoft C, Turbo C and Borland C++.
  357.  
  358.         ■ Royalty-free use of all library functions.
  359.  
  360.         ■ Unlimited technical support.
  361.  
  362.         ■ Low-cost upgrades.
  363.  
  364.     A disk containing the full source code is also available for a small  fee,
  365.     see the file "order.txt" for  registration  details  and prices, a copy of
  366.     this is provided in Appendix IV of this manual.
  367.  
  368. 1.3 Disclaimer
  369.  
  370.     The author,  Adrian Cunnelly,   claims  no  responsibility for any damages
  371.     caused by the use or misuse of this product.   This product is distributed
  372.     "as is" with no warranty expressed or implied.   The author  will  not  be
  373.     responsible for any losses incurred, either directly or indirectly, by the
  374.     use  of  this product.   Use this product entirely at your own risk.   The
  375.     author reserves the right to make  modifications at any time.   Prices are
  376.     subject to change without notice.
  377.  
  378. 1.4 Future Enhancements
  379.  
  380.     Future versions of this library will contain Accounting, TTS,   VAP, Queue
  381.     and IPX Diagnostic Services along with additional File and Synchronization
  382.     Services.
  383.  
  384.     All registered users will be automatically informed of all updates.  Which
  385.     will be available for the price of a disk + postage.
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.                                                                                 
  393. Netware C Library          Chapter One - Introduction                  Page: 1-2
  394. ────────────────────────────────────────────────────────────────────────────────
  395.  
  396. 1.5 Change History
  397.  
  398.     Changes from the previous release:
  399.  
  400.            ■ New functions
  401.                  "EncryptPassword"               - File Server Services
  402.                  "GetNetworkSerialNumber"        - File Server Services
  403.                  "LoginObjectEncrypted"          - Connection Services
  404.                  "VerifyObjectPasswordEncrypted" - Connection Services
  405.  
  406.            ■ Documentation for "ScanBinderyObject" has been amended.
  407.  
  408.            ■ Corrected problem in IPXGetLocalTarget.
  409.  
  410.     The complete history of changes can be found in the file "History.txt".
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.                                                                                 
  453. Netware C Library          Chapter One - Introduction                  Page: 1-3
  454. ────────────────────────────────────────────────────────────────────────────────
  455.  
  456. 1.6 Function Summary
  457.  
  458.     The functions in this library provide the following services:
  459.  
  460.     Message Services:
  461.  
  462.         BroadcastToConsole             LogNetworkMessage
  463.         CheckPipeStatus                OpenMessagePipe
  464.         CloseMessagePipe               SendBroadcastMessage
  465.         GetBroadcastMessage            SendPersonalMessage
  466.         GetBroadcastMode               SetBroadcastMode
  467.         GetPersonalMessage
  468.  
  469.     Connection Services:
  470.  
  471.         AttachToFileServer             GetObjectConnectionNumbers
  472.         DetachFromFileServer           GetStationAddress
  473.         EnterLoginArea                 LoginObjectEncrypted
  474.         GetConnectionInformation       LoginToFileServer
  475.         GetConnectionNumber            LogoutFromFileServer
  476.         GetInternetAddress             Logout
  477.         VerifyObjectPasswordEncrypted
  478.  
  479.     Directory Services:
  480.  
  481.         AddTrusteeToDirectory          GetVolumeInfoWithHandle
  482.         AllocPermanentDirectoryHandle  GetVolumeInfoWithNumber
  483.         AllocTemporaryDirectoryHandle  GetVolumeName
  484.         CreateDirectory                GetVolumeNumber
  485.         DeallocateDirectoryHandle      MapFakeRoot
  486.         DeleteDirectory                ModifyMaximumRightsMask
  487.         DeleteFakeRoot                 RenameDirectory
  488.         DeleteTrusteeFromDirectory     RestoreDirectoryHandle
  489.         GetCurrentDirectory            SaveDirectoryHandle
  490.         GetDirectoryHandle             ScanBinderyObjectTrusteePaths
  491.         GetDirectoryPath               ScanDirectoryForTrustees
  492.         GetEffectiveDirectoryRights    ScanDirectoryInformation
  493.         GetVolumeInformation           SetDirectoryHandle
  494.  
  495.     File Server Environment Services:
  496.  
  497.         CheckConsolePrivileges         GetDiskCacheStatistics
  498.         ClearConnectionNumber          GetDiskUtilisation
  499.         DisableFileServerLogin         GetFileServerDateTime
  500.         DisableTransactionTracking     GetFileServerInformation
  501.         DownFileServer                 GetFileServerLoginStatus
  502.         EnableFileServerLogin          GetNetworkSerialNumber
  503.         EnableTransactionTracking      GetPathFromDirectoryEntry
  504.         EncryptPassword                GetPhysicalDiskStatistics
  505.         GetBinderyObjectDiskSpaceLeft  GetSemaphoreInformation
  506.         GetConnectionsOpenFiles        SendConsoleBroadcast
  507.         GetConnectionsUsageStatistics
  508.  
  509.  
  510.  
  511.  
  512.                                                                                 
  513. Netware C Library          Chapter One - Introduction                  Page: 1-4
  514. ────────────────────────────────────────────────────────────────────────────────
  515.  
  516.     Bindery Services:
  517.  
  518.         AddBinderyObjectToSet          GetBinderyObjectID
  519.         ChangeBinderyObjectPassword    GetBinderyObjectName
  520.         ChangeBinderyObjectSecurity    IsBinderyObjectInSet
  521.         ChangePropertySecurity         OpenBindery
  522.         CloseBindery                   ReadPropertyValue
  523.         CreateBinderyObject            RenameBinderyObject
  524.         CreateProperty                 ScanBinderyObject
  525.         DeleteBinderyObjectFromSet     ScanProperty
  526.         DeleteBinderyObject            VerifyBinderyObjectPassword
  527.         DeleteProperty                 WritePropertyValue
  528.         GetBinderyAccessLevel
  529.  
  530.     Workstation Services:
  531.  
  532.         EndOfJob                       GetPreferredConnectionID
  533.         GetConnectionIDTable           GetPrimaryConnectionID
  534.         GetDefaultConnectionID         GetServerConnectionID
  535.         GetDriveConnectionID           IsShellLoaded
  536.         GetDriveFlagTable              SetEndofJobStatus
  537.         GetDriveHandleTable            SetNWErrorMode
  538.         GetFileServerTable             SetPreferredConnectionID
  539.         GetNetwareShellVersion         SetPrimaryConnectionID
  540.         GetNumberOfLocalDrives
  541.  
  542.     Print Services:
  543.  
  544.         CancelLPTCapture               GetPrinterStatus
  545.         CancelSpecificLPTCapture       GetSpecificCaptureFlags
  546.         EndLPTCapture                  SetBannerUserName
  547.         EndSpecificLPTCapture          SetCapturePrintQueue
  548.         FlushLPTCapture                SetDefaultLocalPrinter
  549.         FlushSpecificLPTCapture        SetDefaultCaptureFlags
  550.         GetBannerUserName              SetSpecificCaptureFlags
  551.         GetLPTCaptureStatus            SpecifyCaptureFile
  552.         GetDefaultLocalPrinter         StartLPTCapture
  553.         GetDefaultCaptureFlags         StartSpecificLPTCapture
  554.  
  555.     File Services:
  556.  
  557.         EraseFiles                     PurgeErasedFiles
  558.         PurgeAllErasedFiles            ScanFileInformation
  559.  
  560.     Synchronisation Services:
  561.  
  562.         CloseSemaphore                 SignalSemaphore
  563.         ExamineSemaphore               WaitOnSemaphore
  564.         OpenSemaphore
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.                                                                                 
  573. Netware C Library          Chapter One - Introduction                  Page: 1-5
  574. ────────────────────────────────────────────────────────────────────────────────
  575.  
  576.     Communication Services:
  577.  
  578.         IPXCancelEvent                 IPXInitialise
  579.         IPXCloseSocket                 IPXListenForPacket
  580.         IPXDisconnectFromTarget        IPXOpenSocket
  581.         IPXGetInternetworkAddress      IPXRelinquishControl
  582.         IPXGetIntervalMarker           IPXScheduleIPXEvent
  583.         IPXGetLocalTarget              IPXSendPacket
  584.  
  585.         SPXAbortConnection             SPXListenForConnection
  586.         SPXEstablishConnection         SPXListenForSequencedPacket
  587.         SPXGetConnectionStatus         SPXSendSequencedPacket
  588.         SPXInitialise                  SPXTerminateConnection
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.                                                                                 
  633. Netware C Library          Chapter One - Introduction                  Page: 1-6
  634. ────────────────────────────────────────────────────────────────────────────────
  635.  
  636. 1.7 Netware Data Types
  637.  
  638.     Netware  numeric  items  are  different  from  the  native  representation
  639.     internal to the PC.   Instead of integers being in low-high format Netware
  640.     expects them to be in high-low format.   This means that the bytes of  int
  641.     and long values will have to be swapped round.
  642.  
  643.     The following structures are declared in the header file "Netware.h":
  644.  
  645.          typedef unsigned long    dword;     /* four bytes */
  646.          typedef unsigned int     word;      /* two bytes */
  647.          typedef unsigned char    byte;      /* single byte */
  648.  
  649.          typedef struct { byte hi_byte;
  650.                           byte lo_byte;   } nw_int;
  651.  
  652.          typedef struct { byte hihi_byte;
  653.                           byte hilo_byte;
  654.                           byte lohi_byte;
  655.                           byte lolo_byte; } nw_long;
  656.  
  657.     And the  following  functions  are  provided  to  convert  between Netware
  658.     internal format and native PC format:
  659.  
  660.         PC int -> Netware int:
  661.  
  662.             void NWintconvert(int in,nw_int *convert);
  663.  
  664.         PC long -> Netware long:
  665.  
  666.             void NWlongconvert(unsigned long in,nw_long *convert);
  667.  
  668.         Netware int -> PC int:
  669.  
  670.             int convertNWint(nw_int in);
  671.  
  672.         Netware long -> PC long:
  673.  
  674.             long convertNWlong(nw_long *in);
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.                                                                                 
  693. Netware C Library        Chapter Two - Bindery Services                Page: 2-1
  694. ────────────────────────────────────────────────────────────────────────────────
  695.  
  696.                              2. Bindery Services
  697.  
  698.     The bindery is  basically  a  database,   maintained  by  the Netware file
  699.     server, of the resources and users available on the network.   It consists
  700.     of objects and properties.   An object can be a user,group  or  any  other
  701.     entity  on  the network that has been given a name.   Each object can have
  702.     many properties  associated  with  it,   and  each  property  may  have an
  703.     associated value.
  704.                           ┌────────────┐
  705.                           │   Object   │
  706.                           └─────┬──────┘
  707.                ┌────────────────┼────────────────┐
  708.         ┌──────┴──────┐  ┌──────┴──────┐  ┌──────┴──────┐
  709.         │  Property   │  │  Property   │  │  Property   │
  710.         └──────┬──────┘  └──────┬──────┘  └──────┬──────┘
  711.         ┌──────┴──────┐  ┌──────┴──────┐  ┌──────┴──────┐
  712.         │ Prop Value  │  │ Prop Value  │  │ Prop Value  │
  713.         └─────────────┘  └─────────────┘  └─────────────┘
  714.  
  715. 2.1 Bindery Objects
  716.  
  717.     Each bindery object consists of:  object ID,  object type,   object  name,
  718.     object  flag,  object security,  and properties flag.   The object ID is a
  719.     4-byte unique identifier assigned by  Netware  when the object is created.
  720.     The object type and object name uniquely identify the object.   The object
  721.     flag indicates whether the object  is  dynamic  or  static.    The  object
  722.     security  determines whether other objects can access it.   The properties
  723.     flag indicates whether the object has any properties associated with it.
  724.  
  725.     2.1.1 Object Type
  726.  
  727.         The following object types are currently recognised by Netware:
  728.  
  729.             Description                 Object Type       #define in Netware.h
  730.  
  731.             Unknown                     0x0000            UNKNOWN
  732.             User                        0x0001            USER
  733.             User Group                  0x0002            USER_GROUP
  734.             Print Queue                 0x0003            PRINT_Q
  735.             File Server                 0x0004            FILE_SERVER
  736.             Job Server                  0x0005            JOB_SERVER
  737.             Gateway                     0x0006            GATEWAY
  738.             Print Server                0x0007            PRN_SERVER
  739.             Archive Queue               0x0008            ARCHIVE_Q
  740.             Archive Server              0x0009            ARC_SERVER
  741.             Job Queue                   0x000a            JOB_Q
  742.             Administration              0x000b            ADMIN
  743.             Remote Bridge Server        0x0026            REM_BRIDGE
  744.             Advertising Print Server    0x0047            ADV_PRN_SERVER
  745.             Reserved up to              0x8000
  746.             Wild                        0xffff (-1)       WILDCARD
  747.  
  748.  
  749.  
  750.  
  751.  
  752.                                                                                 
  753. Netware C Library        Chapter Two - Bindery Services                Page: 2-2
  754. ────────────────────────────────────────────────────────────────────────────────
  755.  
  756.     2.1.2 Object Name
  757.  
  758.         The object name contains a  48-byte null terminated string.   The name
  759.         can be 1  -  47  characters  long  and  must  contain  only  printable
  760.         characters,   it  cannot  include  spaces or the following characters:
  761.         slash (/),  backslash  (\),   colon  (:),   semicolon (;),  comma (,),
  762.         asterisk (*) and question mark (?).
  763.  
  764.     2.1.3 Object Flag
  765.  
  766.         The object flag specifies whether  the  object  is  Static  (0x00)  or
  767.         Dynamic (0x01).  A static object is permanent until it is specifically
  768.         deleted,   but a dynamic object will disappear when the file server is
  769.         rebooted.
  770.  
  771.     2.1.4 Object Security
  772.  
  773.         The object security specifies who has access rights to the object,  it
  774.         consists of 1 byte where  the  low-order nibble (bottom 4 bits) define
  775.         the read access and the high-order nibble  (top  4  bits)  define  the
  776.         write access.  The following are defined for each nibble:
  777.  
  778.             Binary   Access     Description
  779.             0 0 0 0  Anyone     Access allowed to all users
  780.             0 0 0 1  Logged     Access to all logged in users
  781.             0 0 1 0  Object     Access only to users who have logged in
  782.                                 with this object name,type and password
  783.             0 0 1 1  Supervisor Access only to supervisor users
  784.             0 1 0 0  Netware    Access only allowed by Netware itself
  785.  
  786.     2.1.5 Properties flag
  787.  
  788.         The  properties  flag  is  an  indicator which is set if there are any
  789.         properties associated with this object.
  790.  
  791. 2.2 Properties and their Values
  792.  
  793.     Properties are either Item Properties or Set Properties.  An item property
  794.     has associated with it  a  128  byte  value,   whereas  a set property has
  795.     associated with it a list of 1 to 32 object IDs contained in  a  128  byte
  796.     segment.
  797.  
  798.     Each  property  consists  of:   property  name,  property flags,  property
  799.     security and property values flag.
  800.  
  801.     2.2.1 Property Name
  802.  
  803.         The property  name  can  be  1  to  15  characters  long  of which the
  804.         following are currently defined by Netware:
  805.  
  806.                 LOGIN_CONTROL       Item            ACCOUNT_SERVERS     Set
  807.                 ACCOUNT_BALANCE     Item            SECURITY_EQUALS     Set
  808.                 PASSWORD            Item            GROUP_MEMBERS       Set
  809.                 NET_ADDRESS         Item            GROUPS_I'M_IN       Set
  810.                 IDENTIFICATION      Item            OPERATORS           Set
  811.  
  812.                                                                                 
  813. Netware C Library        Chapter Two - Bindery Services                Page: 2-3
  814. ────────────────────────────────────────────────────────────────────────────────
  815.  
  816.     2.2.2 Property Flag
  817.  
  818.         The property flags is a 1 byte field, where only 2 bits are defined:
  819.  
  820.             Bits    7 6 5 4 3 2 1 0
  821.                     - - - - - - - 0  The property is static
  822.                     - - - - - - - 1  The property is dynamic
  823.                     - - - - - - 0 -  The property is an item
  824.                     - - - - - - 1 -  The property is a set
  825.  
  826.     2.2.3 Property Security
  827.  
  828.         The property security specifies who has access rights to the property,
  829.         it consists of 1 byte where  the  low-order  nibble  (bottom  4  bits)
  830.         defines  who  can  scan  for  and find the property and the high-order
  831.         nibble (top 4 bits) defines who  can add values to the property.   The
  832.         following are defined for each nibble:
  833.  
  834.             Binary   Access     Description
  835.             0 0 0 0  Anyone     Access allowed to all users
  836.             0 0 0 1  Logged     Access to all logged in users
  837.             0 0 1 0  Object     Access only to users who have logged in
  838.                                 with this object name,type and password
  839.             0 0 1 1  Supervisor Access only to supervisor users
  840.             0 1 0 0  Netware    Access only allowed by Netware itself
  841.  
  842.     2.2.4 Property Values Flag
  843.  
  844.         The property values flag is an indicator which is set if there are any
  845.         values associated with this property.
  846.  
  847. 2.3 Bindery Functions
  848.  
  849.     2.3.1 AddBinderyObjectToSet
  850.  
  851.           Adds a bindery object to a set property.
  852.  
  853.           int AddBinderyObjectToSet(int objectType,char *objectName,
  854.                                     char *propertyName,int memberType,
  855.                                     char *memberName);
  856.  
  857.           Input:
  858.              objectType:     Bindery object type of property owner
  859.              objectName:     48-byte null terminated Object Name of property
  860.                              owner
  861.              propertyName:   16-byte null terminated Property Name
  862.              memberType:     Bindery object type of object to add to set
  863.              memberName:     48-byte null terminated Object name of object
  864.                              to add to set
  865.  
  866.           Returns:           Result code (see Appendix I)
  867.  
  868.  
  869.  
  870.  
  871.  
  872.                                                                                 
  873. Netware C Library        Chapter Two - Bindery Services                Page: 2-4
  874. ────────────────────────────────────────────────────────────────────────────────
  875.  
  876.     2.3.2 ChangeBinderyObjectPassword
  877.  
  878.           Changes the password of a bindery object.
  879.  
  880.           int ChangeBinderyObjectPassword(int objectType,char *objectName,
  881.                                           char *oldPass,char *newPass);
  882.  
  883.           Input:
  884.              objectType:    Bindery object type
  885.              objectName:    48-byte null terminated Object Name
  886.              oldPass:       128-byte null terminated old password
  887.              newPass:       128-byte null terminated new password
  888.  
  889.           Returns:          Result code (see Appendix I)
  890.  
  891.     2.3.3 ChangeBinderyObjectSecurity
  892.  
  893.           Allows the supervisor to change the security of a bindery object.
  894.  
  895.           int ChangeBinderyObjectSecurity(byte newSecurity,int objectType,
  896.                                           char *objectName);
  897.  
  898.           Input:
  899.              newSecurity:   The new security setting for this object
  900.              objectType:    Bindery object type
  901.              objectName:    48-byte null terminated Object Name
  902.  
  903.           Returns:          Result code (see Appendix I)
  904.  
  905.     2.3.4 ChangePropertySecurity
  906.  
  907.           Changes the security of a bindery objects property.
  908.  
  909.           int ChangePropertySecurity(int objectType,char *objectName,
  910.                                      byte newPropSecurity,char *propName);
  911.  
  912.           Input:
  913.              objectType:       Bindery object type
  914.              objectName:       48-byte null terminated Object Name
  915.              newPropSecurity:  The new property security
  916.              propName:         16-byte null terminated Property name
  917.  
  918.           Returns:             Result code (see Appendix I)
  919.  
  920.     2.3.5 CloseBindery                                            (Supervisor)
  921.  
  922.           Allows the supervisor to close  the  bindery, it closes both bindery
  923.           files (NET$BIND.SYS & NET$BVAL.SYS).  Whilst the bindery  is  closed
  924.           no  other  bindery calls can be serviced, so the time spent with the
  925.           bindery closed should be kept to a minimum.
  926.  
  927.           int CloseBindery(void);
  928.  
  929.           Returns:        Result code (see Appendix I)
  930.  
  931.  
  932.                                                                                 
  933. Netware C Library        Chapter Two - Bindery Services                Page: 2-5
  934. ────────────────────────────────────────────────────────────────────────────────
  935.  
  936.     2.3.6 CreateBinderyObject                                     (Supervisor)
  937.  
  938.           Allows the supervisor to create a bindery object.
  939.  
  940.           int CreateBinderyObject(byte flag,byte security,int objectType,
  941.                                   char *objectName);
  942.  
  943.           Input:
  944.              flag:          Specifies whether static (0x00) or dynamic (0x01)
  945.              security:      Security setting for this object
  946.              objectType:    Bindery object type
  947.              objectName:    48-byte null terminated Object name
  948.  
  949.           Returns:          Result code (see Appendix I)
  950.  
  951.     2.3.7 CreateProperty
  952.  
  953.           Adds a property to a bindery object.
  954.  
  955.           int CreateProperty(int objectType,char *objectName,
  956.                              byte propFlags,byte propSecurity,
  957.                              char *propName);
  958.  
  959.           Input:
  960.              objectType:    Bindery object type
  961.              objectName:    48-byte null terminated Object name
  962.              propFlags:     Property flags (static/dynamic & item/set)
  963.              propSecurity:  Security setting for this property
  964.              propName:      16-byte null terminated Property name
  965.  
  966.           Returns:          Result code (see Appendix I)
  967.  
  968.     2.3.8 DeleteBinderyObjectFromSet
  969.  
  970.           Deletes a bindery object from a set property.
  971.  
  972.           int DeleteBinderyObjectFromSet(int objectType,char *objectName,
  973.                                          char *propertyName,int memberType,
  974.                                          char *memberName);
  975.  
  976.           Input:
  977.              objectType:    Bindery object type of property owner
  978.              objectName:    48-byte null terminated Object name of property
  979.                             owner
  980.              propertyName:  16-byte null terminated Set Property name
  981.              memberType:    Bindery object type of object to remove from set
  982.              memberName:    48-byte null terminated Object name of object
  983.                             to remove from set
  984.  
  985.           Returns:          Result code (see Appendix I)
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.                                                                                 
  993. Netware C Library        Chapter Two - Bindery Services                Page: 2-6
  994. ────────────────────────────────────────────────────────────────────────────────
  995.  
  996.     2.3.9 DeleteBinderyObject                                     (Supervisor)
  997.  
  998.           Allows the supervisor to delete a bindery object.
  999.  
  1000.           int DeleteBinderyObject(int objectType,char *objectName);
  1001.  
  1002.           Input:
  1003.              objectType:    Bindery object type
  1004.              objectName:    48-byte null terminated Object name
  1005.  
  1006.           Returns:           Result code (see Appendix I)
  1007.  
  1008.     2.3.10 DeleteProperty
  1009.  
  1010.           Deletes a property from a bindery object.
  1011.  
  1012.           int DeleteProperty(int objectType,char *objectName,
  1013.                              char *propName);
  1014.  
  1015.           Input:
  1016.              objectType:    Bindery object type
  1017.              objectName:    48-byte null terminated Object name
  1018.              propName:      16-byte null terminated Property name
  1019.  
  1020.           Returns:           Result code (see Appendix I)
  1021.  
  1022.     2.3.11 GetBinderyAccessLevel
  1023.  
  1024.           Returns the requesting  workstation's  access  level to the server's
  1025.           bindery.
  1026.  
  1027.           int  GetBinderyAccessLevel(long *objectID,byte *accessLevel);
  1028.  
  1029.           Output:
  1030.              objectID:       Returns Bindery object ID of logged in user
  1031.              accessLevel:    Returns Bindery access level of logged in user.
  1032.                              See Object Security in the definition of Bindery
  1033.                              Objects.
  1034.  
  1035.           Returns:           Result code (see Appendix I)
  1036.  
  1037.     2.3.12 GetBinderyObjectID
  1038.  
  1039.           Returns a bindery object's identification number.
  1040.  
  1041.           int GetBinderyObjectID(word objectType,char *objectName,
  1042.                                  long *objectID);
  1043.  
  1044.           Input:
  1045.              objectType:    Bindery object type
  1046.              objectName:    48-byte null terminated Object name
  1047.  
  1048.           Output:
  1049.              objectID:      Returned object ID number of specified object.
  1050.  
  1051.           Returns:          Result code (see Appendix I)
  1052.                                                                                 
  1053. Netware C Library        Chapter Two - Bindery Services                Page: 2-7
  1054. ────────────────────────────────────────────────────────────────────────────────
  1055.  
  1056.     2.3.13 GetBinderyObjectName
  1057.  
  1058.           Returns the type and name of the specified object.
  1059.  
  1060.           int GetBinderyObjectName(long objectID,word *objectType,
  1061.                                    char *objectName);
  1062.  
  1063.           Input:
  1064.              objectID:   Bindery object identification number
  1065.  
  1066.           Output:
  1067.              objectType: Bindery object type
  1068.              objectName: 48-byte null terminated Bindery object name
  1069.  
  1070.           Returns:       Result code (see Appendix I)
  1071.  
  1072.     2.3.14 IsBinderyObjectInSet
  1073.  
  1074.           Determines if a bindery object is a  member  of  the  specified  set
  1075.           property.
  1076.  
  1077.           int IsBinderyObjectInSet(int objectType,char *objectName,
  1078.                                    char *propertyName,int memberType,
  1079.                                    char *memberName);
  1080.  
  1081.           Input:
  1082.              objectType:    Bindery object type of property owner
  1083.              objectName:    48-byte null terminated Object Name of property
  1084.                             owner
  1085.              propertyName:  16-byte null terminated Property Name
  1086.              memberType:    Bindery object type of object to check
  1087.              memberName:    48-byte null terminated Object name of object to
  1088.                             check
  1089.  
  1090.           Returns:          Result code (see Appendix I)
  1091.  
  1092.     2.3.15 OpenBindery                                            (Supervisor)
  1093.  
  1094.           Allows  the supervisor to open the bindery, it opens the two bindery
  1095.           files (NET$BIND.SYS & NET$BVAL.SYS).  The bindery files are normally
  1096.           kept open and locked, so  this  function  is only needed following a
  1097.           call to CloseBindery.
  1098.  
  1099.           int OpenBindery(void);
  1100.  
  1101.           Returns:        Result code (see Appendix I)
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.                                                                                 
  1113. Netware C Library        Chapter Two - Bindery Services                Page: 2-8
  1114. ────────────────────────────────────────────────────────────────────────────────
  1115.  
  1116.     2.3.16 ReadPropertyValue
  1117.  
  1118.           Returns the value of a bindery objects property.  This function must
  1119.           be  called  repeatedly  to  return  all  values  associated  with  a
  1120.           particular property.
  1121.  
  1122.           int ReadPropertyValue(int objectType,char *objectName,
  1123.                                 char *propertyName,int segment,
  1124.                                 char *propertyValues,byte *moreSegments,
  1125.                                 byte *propertyFlag);
  1126.  
  1127.           Input:
  1128.              objectType:     Bindery object type
  1129.              objectName:     48-byte null terminated Object name
  1130.              propertyName:   16-byte null terminated Property name
  1131.              segment:        The first time this call is made 0x01 should be
  1132.                              placed in this field, it should then be increased
  1133.                              by 1 for each subsequent call until the call sets
  1134.                              the more_segments field to 0x00 or a result code
  1135.                              of 0xec (No such segment) is returned.
  1136.  
  1137.           Output:
  1138.              propertyValues: This contains the 128-byte property value.
  1139.              moreSegments:   This indicates whether there are any more
  1140.                              property values to be read:
  1141.                                            0x00 = No more, 0xff = More.
  1142.              propertyFlag:   Returns property flag.
  1143.                              See definition of Properties.
  1144.  
  1145.           Returns:           Result code (see Appendix I)
  1146.  
  1147.     2.3.17 RenameBinderyObject                                    (Supervisor)
  1148.  
  1149.           Allows the supervisor to rename a bindery object.
  1150.  
  1151.           int RenameBinderyObject(int objectType,char *objectName,
  1152.                                   char *newObjectName);
  1153.  
  1154.           Input:
  1155.              objectType:       Bindery object type
  1156.              objectName:       48-byte null terminated Original bindery
  1157.                                object name
  1158.              newObjectName:    48-byte null terminated New object name
  1159.  
  1160.           Returns:             Result code (see Appendix I)
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.                                                                                 
  1173. Netware C Library        Chapter Two - Bindery Services                Page: 2-9
  1174. ────────────────────────────────────────────────────────────────────────────────
  1175.  
  1176.     2.3.18 ScanBinderyObject
  1177.  
  1178.           Searches the bindery for the  specified  object.  This can be called
  1179.           iteratively in order to scan the bindery for several  objects  of  a
  1180.           particular type.
  1181.  
  1182.           int ScanBinderyObject(int scanObjectType,char *scanObjectName,
  1183.                                 long *lastObjectID,int *objectType,
  1184.                                 char *objectName,byte *objectHasProperties,
  1185.                                 byte *objectSecurity,byte *objectFlag);
  1186.  
  1187.           Input:
  1188.              scanObjectType:         Type of object to scan for.  This can be
  1189.                                      one particular type, e.g. USER 0x0001, or
  1190.                                      all object types, e.g. WILDCARD 0xffff.
  1191.              scanObjectName:         48-byte  null terminated Object name  for
  1192.                                      which  the call  should scan.  The object
  1193.                                      name can contain wildcard characters.
  1194.              lastObjectID:           This should contain 0xffffffff the first
  1195.                                      time the call is made, otherwise it
  1196.                                      should contain the previous object id
  1197.                                      that was returned.
  1198.  
  1199.           Output:
  1200.              lastObjectID:           Object ID of object found
  1201.              objectType:             Object type of object found
  1202.              objectName:             48-byte null terminated Object name of
  1203.                                      object found
  1204.              objectHasProperties:    0x00 = No properties associated
  1205.                                      0xff = There are some properties
  1206.              objectSecurity:         Access security bits.
  1207.                                      See Object Security in definition of
  1208.                                      Bindery Objects.
  1209.              objectFlag:             0x00 = Object is Static
  1210.                                      0x01 = Object is Dynamic
  1211.  
  1212.           Returns:                   Result code (see Appendix I)
  1213.  
  1214.     2.3.19 ScanProperty
  1215.  
  1216.           Searches for an objects property.
  1217.  
  1218.           int ScanProperty(int objectType,char *objectName,
  1219.                            char *scanPropertyName,char *propertyName,
  1220.                            byte *propertyFlags,byte *propertySecurity,
  1221.                            byte *propertyHasValue,byte *moreProperties);
  1222.  
  1223.           Input:
  1224.              objectType:        Bindery object type
  1225.              objectName:        48-byte null terminated Object name
  1226.              scanPropertyName:  16-byte null terminated Property name to
  1227.                                 scan for
  1228.  
  1229.  
  1230.  
  1231.  
  1232.                                                                                 
  1233. Netware C Library        Chapter Two - Bindery Services               Page: 2-10
  1234. ────────────────────────────────────────────────────────────────────────────────
  1235.  
  1236.           Output:
  1237.              propertyName:      16-byte null terminated Name of property found
  1238.              propertyFlags:     Returns property flag. See definition of
  1239.                                 Properties.
  1240.              propertySecurity:  Returns property access bits.
  1241.              propertyHasValue:  0x00 = No values associated
  1242.                                 0xff = This property has some values
  1243.              moreProperties:    0x00 = No more properties
  1244.                                 0xff = Yes there are more properties
  1245.  
  1246.           Returns:              Result code (see Appendix I)
  1247.  
  1248.     2.3.20 VerifyBinderyObjectPassword
  1249.  
  1250.           Verifies that the specified password matches the actual password  of
  1251.           the specified bindery object.
  1252.  
  1253.           int VerifyBinderyObjectPassword(int objectType,char *objectName,
  1254.                                           char *password);
  1255.  
  1256.           Input:
  1257.              objectType:    Bindery object type
  1258.              objectName:    48-byte null terminated Object name
  1259.              password:      128-byte null terminated Password to verify
  1260.  
  1261.           Returns:          Result code (see Appendix I)
  1262.  
  1263.     2.3.21 VerifyObjectPasswordEncrypted
  1264.  
  1265.           Verifies that the specified password matches the actual password  of
  1266.           the  specified bindery object. This function must be used instead of
  1267.           VerifyBinderyObjectPassword if the version of Netware running on the
  1268.           default   file   server   uses   encrypted   passwords.    See   the
  1269.           EncryptPassword function  in  the  File  Server Environment Services
  1270.           chapter.
  1271.  
  1272.           int VerifyObjectPasswordEncrypted(word objectType,char *objectName,
  1273.                                             byte *encryptedPassword)
  1274.  
  1275.           Input:
  1276.              objectType:        Bindery object type
  1277.                                 (see Bindery Objects in Bindery Services)
  1278.              objectName:        48-byte null terminated Object name
  1279.              encryptedPassword: 8-byte encrypted password, returned by
  1280.                                 EncryptPassword.
  1281.  
  1282.           Returns:              Result code (see Appendix I)
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.                                                                                 
  1293. Netware C Library        Chapter Two - Bindery Services               Page: 2-11
  1294. ────────────────────────────────────────────────────────────────────────────────
  1295.  
  1296.     2.3.22 WritePropertyValue
  1297.  
  1298.           Writes  a  value  to  a  property.   Property  values  are stored in
  1299.           128-byte segments known  as  value  segments.  Before creating value
  1300.           segment n, segments 1 through n-1 must be created.
  1301.  
  1302.           This call must not be  used  to  write  values  to  Set  Properties,
  1303.           instead use AddBinderyObjectToSet.
  1304.  
  1305.           int WritePropertyValue(int objectType,char *objectName,
  1306.                                  int segment,byte eraseRemaining,
  1307.                                  char *propName,byte *value);
  1308.  
  1309.           Input:
  1310.              objectType:     Bindery object type
  1311.              objectName:     48-byte null terminated Object name
  1312.              segment:        Segment number to write
  1313.              eraseRemaining: This specifies whether any segments that exist
  1314.                              after this segment are to be deleted.
  1315.                                  0x00 = Erase all following segments
  1316.                                  0xff = Do not erase following segments
  1317.              propName:       16-byte null terminated Name of property to
  1318.                              amend
  1319.              value:          128-byte value segment to write
  1320.  
  1321.           Returns:           Result code (see Appendix I)
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.  
  1350.  
  1351.  
  1352.                                                                                 
  1353. Netware C Library     Chapter Three - File Server Services             Page: 3-1
  1354. ────────────────────────────────────────────────────────────────────────────────
  1355.  
  1356.                      3. File Server Environment Services
  1357.  
  1358.     These services allow an application to return information about  the  file
  1359.     system,   transaction  tracking  system,   physical disks,  disk channels,
  1360.     volumes,  disk caches etc.    In  fact  it  provides many of the functions
  1361.     performed by FCONSOLE.   Most of the calls in this section require  either
  1362.     Operator or Supervisor rights.
  1363.  
  1364.  
  1365. 3.1 File Server Functions
  1366.  
  1367.     3.1.1 CheckConsolePrivileges
  1368.  
  1369.           This  call  returns  whether  the current logged in user has console
  1370.           operator rights.
  1371.  
  1372.           int CheckConsolePrivileges(void);
  1373.  
  1374.           Returns:    0x00    Successful (has operator rights)
  1375.                       0xc6    No console rights
  1376.  
  1377.     3.1.2 ClearConnectionNumber                                   (Supervisor)
  1378.  
  1379.           This clears a logical connection from  the file server.  It closes a
  1380.           connections open files and release any file locks.  On  a  TTS  file
  1381.           server it causes a connections transactions to be aborted.
  1382.  
  1383.           int ClearConnectionNumber(int connection);
  1384.  
  1385.           Input:
  1386.              connection:     Contains the connection number that the server
  1387.                              assigns to a workstation when it attaches to it.
  1388.  
  1389.           Returns:           Result code (see Appendix I)
  1390.  
  1391.     3.1.3 DisableFileServerLogin                                    (Operator)
  1392.  
  1393.           This disables all future logins to the default file server.
  1394.  
  1395.           int DisableFileServerLogin(void);
  1396.  
  1397.           Returns:        Result code (see Appendix I)
  1398.  
  1399.     3.1.4 DisableTransactionTracking                                (Operator)
  1400.  
  1401.           Disable  transaction tracking on the default file server.  It has no
  1402.           effect if TTS is not installed.
  1403.  
  1404.           int DisableTransactionTracking(void);
  1405.  
  1406.           Returns:        Result code (see Appendix I)
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.                                                                                 
  1413. Netware C Library     Chapter Three - File Server Services             Page: 3-2
  1414. ────────────────────────────────────────────────────────────────────────────────
  1415.  
  1416.     3.1.5 DownFileServer                                          (Supervisor)
  1417.  
  1418.           Close down the file server.
  1419.  
  1420.           int DownFileServer(int forceIt);
  1421.  
  1422.           Input:
  1423.              forceIt:    0x00 = Do not close down if there are any open files
  1424.                          0x01 = Force close down regardless of any open files
  1425.  
  1426.           Returns:       Result code (see Appendix I)
  1427.  
  1428.     3.1.6 EnableFileServerLogin                                     (Operator)
  1429.  
  1430.           Enable logins on the default file server.
  1431.  
  1432.           int EnableFileServerLogin(void);
  1433.  
  1434.           Returns:        Result code (see Appendix I)
  1435.  
  1436.     3.1.7 EnableTransactionTracking                                 (Operator)
  1437.  
  1438.           Enable transaction tracking on the default file server.
  1439.  
  1440.           int EnableTransactionTracking(void);
  1441.  
  1442.           Returns:        Result code (see Appendix I)
  1443.  
  1444.     3.1.8 EncryptPassword
  1445.  
  1446.           Encrypts a bindery objects password.  This is only required  if  the
  1447.           version of Netware running on the default file server uses encrypted
  1448.           passwords.   If  this  function returns a non-zero result code, then
  1449.           encrypted passwords are not supported.
  1450.  
  1451.           int EncryptPassword(long objectID,char *userPassword,
  1452.                               char *encryptedPassword)
  1453.  
  1454.           Input:
  1455.              objectID:          Bindery object type
  1456.                                 (see Bindery Objects in Bindery Services)
  1457.              userPassword:      128-byte null terminated password
  1458.              encryptedPassword: 8-byte encrypted password
  1459.  
  1460.           Returns:              Result code (see Appendix I)
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.                                                                                 
  1473. Netware C Library     Chapter Three - File Server Services             Page: 3-3
  1474. ────────────────────────────────────────────────────────────────────────────────
  1475.  
  1476.     3.1.9 GetBinderyObjectDiskSpaceLeft
  1477.  
  1478.           Return a bindery objects remaining disk space.
  1479.  
  1480.           int GetBinderyObjectDiskSpaceLeft(long objectID,
  1481.                             long *systemElapsedTime,long *unusedDiskBlocks,
  1482.                             byte *restrictionsEnforced);
  1483.  
  1484.           Input:
  1485.              objectID:             Bindery object identification number, this
  1486.                                    must be the currently logged in object,
  1487.                                    unless the logged object has console
  1488.                                    operator rights.
  1489.  
  1490.           Output:
  1491.              systemElapsedTime:    Time that has elapsed since the server was
  1492.                                    loaded. It is returned in units of approx
  1493.                                    1/18th of a second. When this field reaches
  1494.                                    0xFFFFFFFF it wraps back to zero.
  1495.              unusedDiskBlocks:     This is the number of remaining blocks the
  1496.                                    bindery object can allocate (1 block=4,096
  1497.                                    bytes). The unused disk blocks available to
  1498.                                    a user do not reflect how much disk space
  1499.                                    is really available.
  1500.              restrictionsEnforced: 0x00 = Disk resource limit is active
  1501.                                    0xff = Disk resource limit is not active
  1502.  
  1503.           Returns:                 Result code (see Appendix I)
  1504.  
  1505.     3.1.10 GetConnectionsOpenFiles                                  (Operator)
  1506.  
  1507.           Returns information  about  files  a  specific  connection has open.
  1508.           This must be called repeatedly to obtain all files  that  are  open.
  1509.           The  first  call  must  have  "sequence"  set  to zero, on return if
  1510.           sequence = -1, then there are no more files open.
  1511.  
  1512.           int GetConnectionsOpenFiles(int connection,int *sequence,
  1513.                                       byte *taskNumber,byte *lockFlag,
  1514.                                       byte *accessFlag,byte *lockType,
  1515.                                       byte *nameSpace,byte *volumeNumber,
  1516.                                       int *parentDirEntry,int *directoryEntry,
  1517.                                       char *fileName)
  1518.  
  1519.           Input:
  1520.              connection:     Logical connection number
  1521.              sequence:       On the initial call, this must be zero. On all
  1522.                              subsequent calls this must be the value that was
  1523.                              returned on the last call.
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531.  
  1532.                                                                                 
  1533. Netware C Library     Chapter Three - File Server Services             Page: 3-4
  1534. ────────────────────────────────────────────────────────────────────────────────
  1535.  
  1536.           Output:
  1537.              sequence:       Next sequence number to use. When this is set
  1538.                              to -1, there are no more files open.
  1539.              taskNumber:     This is the task number within the workstation
  1540.                              that has the file open.
  1541.              lockFlag:       Contains bit settings indicating the file's
  1542.                              locks.
  1543.  
  1544.                                  (MSB) Bit 7:   Transaction flag set
  1545.                                            6:   TTS Holding lock
  1546.                                            5-4: Not Used
  1547.                                            3:   Open Normal
  1548.                                            2:   Logged
  1549.                                            1:   Open Shareable
  1550.                                  (LSB)     0:   Locked
  1551.  
  1552.              accessFlag:     Contains bit settings indicating the
  1553.                              connection's access rights to the file :-
  1554.  
  1555.                                  (MSB) Bit 7:  Not Used
  1556.                                            6:  TTS Holding Open
  1557.                                            5:  TTS Holding Detach
  1558.                                            4:  File Detached
  1559.                                            3:  Deny Write Requests from
  1560.                                                Other Stations
  1561.                                            2:  Deny Read Requests from
  1562.                                                Other Stations
  1563.                                            1:  Open For Write by this Station
  1564.                                  (LSB)     0:  Open For Read by this Station
  1565.  
  1566.              lockType:       A flag indicating the type of lock.
  1567.  
  1568.                                  0x00 Not Locked
  1569.                                  0xFE Locked by a File Lock
  1570.                                  0xFF Locked by Begin Share File Set
  1571.  
  1572.              nameSpace:      The name space used by this entry. This is only
  1573.                              returned on Netware 3.xx, a value of zero will
  1574.                              be returned on Netware 2.xx.
  1575.              volumeNumber:   The volume number within the servers Volume
  1576.                              Table that holds this file.
  1577.              parentDirEntry: An offset in the servers Directory Entry Table
  1578.                              for the volume. Use GetPathFromDirectoryEntry
  1579.                              to get the path name this points to.
  1580.              directoryEntry: An offset in the servers Directory Entry Table
  1581.                              for the volume. Use GetPathFromDirectoryEntry
  1582.                              to get the path name this points to. This will
  1583.                              always be the same as parentDirEntry on Netware
  1584.                              2.xx.
  1585.              fileName:       14-byte null terminated string containing the
  1586.                              terminal file name.
  1587.  
  1588.           Returns:           Result code (see Appendix I)
  1589.  
  1590.  
  1591.  
  1592.                                                                                 
  1593. Netware C Library     Chapter Three - File Server Services             Page: 3-5
  1594. ────────────────────────────────────────────────────────────────────────────────
  1595.  
  1596.     3.1.11 GetConnectionsUsageStatistics                            (Operator)
  1597.  
  1598.           Returns a logical  connection's  usage statistics.  Console operator
  1599.           rights are required unless the requesting  workstation's  connection
  1600.           number is used.
  1601.  
  1602.           int GetConnectionsUsageStatistics(int connection,
  1603.                             long *systemElapsedTime,double *bytesRead,
  1604.                             double *bytesWritten,long *totalRequestPackets);
  1605.  
  1606.           Input:
  1607.              connection:          Logical connection number
  1608.  
  1609.           Output:
  1610.              systemElapsedTime:   This is the time, in approximately 1/18ths
  1611.                                   of a second, that has elapsed since the
  1612.                                   server was brought up.
  1613.              bytesRead:           This is the number of bytes that have been
  1614.                                   read since the workstation was logged in.
  1615.              bytesWritten:        This is the number of bytes that have been
  1616.                                   written since the workstation was logged
  1617.                                   in.
  1618.              totalRequestPackets: The number of request packets sent by the
  1619.                                   workstation to the server since the
  1620.                                   workstation attached.
  1621.  
  1622.           Returns:                Result code (see Appendix I)
  1623.  
  1624.     3.1.12 GetDiskCacheStatistics                                   (Operator)
  1625.  
  1626.           Return statistics from the default file servers cache software.
  1627.  
  1628.           int GetDiskCacheStatistics(DISK_CACHE_STATISTICS *ReplyBuffer);
  1629.  
  1630.           Output:
  1631.              ReplyBuffer:    This contains all cache statistics.
  1632.                              It's structure is declared in "Server.h".
  1633.                              See Appendix III.
  1634.  
  1635.           Returns:           Result code (see Appendix I)
  1636.  
  1637.     3.1.13 GetDiskUtilisation
  1638.  
  1639.           Returns the disk usage of a bindery object on a volume.
  1640.  
  1641.           int GetDiskUtilisation(long objectID,byte volumeNumber,
  1642.                                  word *usedDirectories,word *usedFiles,
  1643.                                  word *usedBlocks);
  1644.  
  1645.           Input:
  1646.              objectID:        Bindery object identification number
  1647.              volumeNumber:    This identifies the volume in the Volume Table
  1648.                               on the file server
  1649.  
  1650.  
  1651.  
  1652.                                                                                 
  1653. Netware C Library     Chapter Three - File Server Services             Page: 3-6
  1654. ────────────────────────────────────────────────────────────────────────────────
  1655.  
  1656.           Output:
  1657.              usedDirectories: The number of directories owned by the
  1658.                               bindery object.
  1659.              usedFiles:       The number of files created by the bindery
  1660.                               object
  1661.              usedBlocks:      Space used by "usedFiles"
  1662.  
  1663.           Returns:            Result code (see Appendix I)
  1664.  
  1665.     3.1.14 GetFileServerDateTime
  1666.  
  1667.           Returns the current date and time on the server.
  1668.  
  1669.           void GetFileServerDateTime( int *hours,int *minutes,int *seconds,
  1670.                                       int *day,int *month,int *year,
  1671.                                       int *dayOfWeek);
  1672.  
  1673.           Output:
  1674.              hours:      Number of Hours (0 to 23)
  1675.              minutes:    Number of Minutes (0 to 59)
  1676.              seconds:    Number of Seconds (0 to 59)
  1677.              day:        Number of day (1 to 31)
  1678.              month:      Month number (1 to 12)
  1679.              year:       Year
  1680.              dayOfWeek:  Day of the Week (0 to 6, 0=Sunday)
  1681.  
  1682.     3.1.15 GetFileServerInformation
  1683.  
  1684.           Returns information about the default file server.
  1685.  
  1686.           int GetFileServerInformation(FILE_SERVER_INFO *replyBuffer);
  1687.  
  1688.           Output:
  1689.              replyBuffer:    Returned Information.
  1690.                              Structure is declared in the header "Server.h".
  1691.                              See Appendix III.
  1692.  
  1693.           Returns:           Result code (see Appendix I)
  1694.  
  1695.     3.1.16 GetFileServerLoginStatus                                 (Operator)
  1696.  
  1697.           Returns the default file server's login status.
  1698.  
  1699.           int GetFileServerLoginStatus(int *loginEnabled);
  1700.  
  1701.           Output:
  1702.              loginEnabled:  This indicates whether  login is enabled (0xff) or
  1703.                             disabled  (0x00).    Logins  can  be  disabled  by
  1704.                             calling  DisableFileServerLogin  and  subsequently
  1705.                             enabled with EnableFileServerLogin.
  1706.  
  1707.           Returns:          Result code (see Appendix I)
  1708.  
  1709.  
  1710.  
  1711.  
  1712.                                                                                 
  1713. Netware C Library     Chapter Three - File Server Services             Page: 3-7
  1714. ────────────────────────────────────────────────────────────────────────────────
  1715.  
  1716.     3.1.17 GetNetworkSerialNumber
  1717.  
  1718.           Returns the  default  file  server's  serial  number and application
  1719.           number.
  1720.  
  1721.           int GetNetworkSerialNumber(dword *serverSerialNumber ,
  1722.                                      word  *appSerialNumber);
  1723.  
  1724.           Output:
  1725.              serverSerialNumber:  The file server's serial number.
  1726.              appSerialNumber:     The file server's application serial number.
  1727.  
  1728.           Returns:                Result code (see Appendix I)
  1729.  
  1730.     3.1.18 GetPathFromDirectoryEntry
  1731.  
  1732.           Returns  the  full  file  path associated with a specified directory
  1733.           entry number on a particular volume.
  1734.  
  1735.           int GetPathFromDirectoryEntry(byte volumeNumber,int directoryEntry,
  1736.                                         char *path);
  1737.  
  1738.           Input:
  1739.              volumeNumber:   Volume number containing the directory.
  1740.              directoryEntry: The offset in the servers Directory Entry Table.
  1741.                              This is returned by GetConnectionsOpenFiles.
  1742.  
  1743.           Output:
  1744.              path:           256-byte null terminated full file path of the
  1745.                              directory.
  1746.  
  1747.           Returns:           Result code (see Appendix I)
  1748.  
  1749.     3.1.19 GetPhysicalDiskStatistics                                (Operator)
  1750.  
  1751.           Returns information about a physical disk.
  1752.  
  1753.           int GetPhysicalDiskStatistics(byte physicalDiskNumber,
  1754.                                       PHYSICAL_DISK_STATISTICS *replyBuffer);
  1755.  
  1756.           Input:
  1757.              physicalDiskNumber: Physical number of the disk.
  1758.  
  1759.           Output:
  1760.              replyBuffer:        Structure containing the disk statistics. It
  1761.                                  is declared in the header file "Server.h".
  1762.                                  See Appendix III.
  1763.  
  1764.           Returns:               Result code (see Appendix I)
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.                                                                                 
  1773. Netware C Library     Chapter Three - File Server Services             Page: 3-8
  1774. ────────────────────────────────────────────────────────────────────────────────
  1775.  
  1776.     3.1.20 GetSemaphoreInformation                                  (Operator)
  1777.  
  1778.           This call returns information about the specified semaphore. It must
  1779.           be called  repeatedly  in  order  to  obtain  the  full  list of all
  1780.           connections that have the semaphore open.
  1781.  
  1782.           int GetSemaphoreInformation( char *semaphoreName,
  1783.                                        int *sequence,word *openCount,
  1784.                                        int *semaphoreValue,
  1785.                                        word *logicalConnection,
  1786.                                        word *taskNumber );
  1787.  
  1788.           Input:
  1789.              semaphoreName:     The name of the semaphore for which
  1790.                                 information is to be retrieved.
  1791.              sequence:          On the initial call, this must be zero. On all
  1792.                                 subsequent calls this must be the value that
  1793.                                 was returned by the previous call.
  1794.  
  1795.           Output:
  1796.              sequence:          Next sequence number to use. When this is set
  1797.                                 to -1, there are no more connections.
  1798.              openCount:         This is the number of logical connections that
  1799.                                 have this semaphore open.
  1800.              semaphoreValue:    This is the current value of the semaphore, in
  1801.                                 the range -127 to 127. A negative value is the
  1802.                                 number of applications that are currently
  1803.                                 waiting for the semaphore, a positive value is
  1804.                                 the number of applications that can still use
  1805.                                 the semaphore.
  1806.              logicalConnection: This is the logical connection using the
  1807.                                 semaphore.
  1808.              taskNumber:        This is the task number within the logical
  1809.                                 connection that has the semaphore open.
  1810.  
  1811.           Returns:              Result code (see Appendix I)
  1812.  
  1813.     3.1.21 SendConsoleBroadcast                                     (Operator)
  1814.  
  1815.           Send a message to a number of logical connections.
  1816.  
  1817.           int SendConsoleBroadcast( byte connectionCount, byte *connections,
  1818.                                     char *message );
  1819.  
  1820.           Input:
  1821.              connectionCount: Number of connections that are to receive the
  1822.                               message. If this is zero then all attached
  1823.                               workstations are broadcast to. Maximum number
  1824.                               of connections that can be broadcast is 100.
  1825.              connections:     List of connections to which message is to be
  1826.                               sent. Must contain "connectionCount" entries.
  1827.              message:         60-byte null terminated message to send to the
  1828.                               specified connections.
  1829.  
  1830.           Returns:            Result code (see Appendix I)
  1831.  
  1832.                                                                                 
  1833. Netware C Library      Chapter Four - Connection Services              Page: 4-1
  1834. ────────────────────────────────────────────────────────────────────────────────
  1835.  
  1836.                             4. Connection Services
  1837.  
  1838.     These services allow  applications  to  connect  to  a  file server and to
  1839.     obtain information about current connections.
  1840.  
  1841. 4.1 Connection Functions
  1842.  
  1843.     4.1.1 AttachToFileServer
  1844.  
  1845.           Attaches  the  workstation  to  the  specified  file  server.    The
  1846.           workstation must already be logged into at least one server, and can
  1847.           be attached to as many as eight.
  1848.  
  1849.           int AttachToFileServer(char *serverName);
  1850.  
  1851.           Input:
  1852.              serverName:     Name of server to attach to
  1853.  
  1854.           Returns:           Result code (see Appendix I)
  1855.  
  1856.     4.1.2 DetachFromFileServer
  1857.  
  1858.           Detaches the workstation from the specified file server.
  1859.  
  1860.           int DetachFromFileServer(char *serverName);
  1861.  
  1862.           Input:
  1863.              serverName:     Name of server to detach from
  1864.  
  1865.           Returns:           Result code (see Appendix I)
  1866.  
  1867.     4.1.3 EnterLoginArea
  1868.  
  1869.           Puts  the  workstation in the server's SYS:LOGIN directory and tells
  1870.           Netware the name of the  subdirectory beneath SYS:LOGIN in which the
  1871.           login utility is located.
  1872.  
  1873.           int EnterLoginArea(int numberOfLocalDrives,
  1874.                              char *loginDirectoryName);
  1875.  
  1876.           Input:
  1877.              numberOfLocalDrives:    Used to determine the workstation drive
  1878.                                      ID to assign to SYS:
  1879.                                      ( See GetNumberOfLocalDrives )
  1880.              loginDirectoryName:     256-byte null terminated ASCII string
  1881.                                      containing the name of the subdirectory.
  1882.  
  1883.           Returns:                   Result code (see Appendix I)
  1884.  
  1885.  
  1886.  
  1887.  
  1888.  
  1889.  
  1890.  
  1891.  
  1892.                                                                                 
  1893. Netware C Library      Chapter Four - Connection Services              Page: 4-2
  1894. ────────────────────────────────────────────────────────────────────────────────
  1895.  
  1896.     4.1.4 GetConnectionInformation
  1897.  
  1898.           Returns information about the user logged in on a connection.
  1899.  
  1900.           int GetConnectionInformation(word connectNo,char *objectName,
  1901.                               int *objectType,long *objectID,byte *loginTime);
  1902.  
  1903.           Input:
  1904.              connectNo:  Logical connection number
  1905.  
  1906.           Output:
  1907.              objectName: 48-byte null terminated name of logged in object.
  1908.              objectType: Bindery object type of the logged in object.
  1909.              objectID:   Bindery object identification of logged object
  1910.              loginTime:  Date and time the bindery object logged in:
  1911.  
  1912.                      Byte: 0   Year     (0 to 99, where 80=1980,81=1981 etc.
  1913.                                          however a value less than 80 is
  1914.                                          considered to be in the 21st century)
  1915.                            1   Month    (1 to 12)
  1916.                            2   Day      (1 to 31)
  1917.                            3   Hour     (0 to 23)
  1918.                            4   Minute   (0 to 59)
  1919.                            5   Second   (0 to 59)
  1920.                            6   Week Day (0 to 6, where 0=Sunday etc.)
  1921.  
  1922.           Returns:       Result code (see Appendix I)
  1923.  
  1924.     4.1.5 GetConnectionNumber
  1925.  
  1926.           Returns the connection number of the requesting workstation.
  1927.  
  1928.           int GetConnectionNumber(void);
  1929.  
  1930.           Returns:   Workstations connection number (1-100) or zero if
  1931.                      the workstation shell is not loaded.
  1932.  
  1933.     4.1.6 GetInternetAddress
  1934.  
  1935.           Returns a connections internetwork address.
  1936.  
  1937.           int GetInternetAddress(int conn_no,byte *networkNumber,
  1938.                                  byte *nodeAddress,word *socketNumber);
  1939.  
  1940.           Input:
  1941.              conn_no:       Logical connection number
  1942.  
  1943.           Output:
  1944.              networkNumber: 4-byte number identifying the file server the
  1945.                             workstation is physically attached to.
  1946.              nodeAddress:   6-byte address of the workstations LAN board.
  1947.              socketNumber:  This is the socket that the workstation uses to
  1948.                             communicate with the file server. This socket
  1949.                             must not be used by other applications.
  1950.  
  1951.           Returns:          Result code (see Appendix I)
  1952.                                                                                 
  1953. Netware C Library      Chapter Four - Connection Services              Page: 4-3
  1954. ────────────────────────────────────────────────────────────────────────────────
  1955.  
  1956.     4.1.7 GetObjectConnectionNumbers
  1957.  
  1958.           Returns  a  list  of upto 100 connection numbers indicating how many
  1959.           times and under what connection  numbers  a bindery object is logged
  1960.           in to the default file server.
  1961.  
  1962.           int GetObjectConnectionNumbers(word objType,char *objName,
  1963.                                          word *connectionCount,
  1964.                                          byte *connections);
  1965.  
  1966.           Input:
  1967.              objType:         Bindery object type
  1968.              objName:         48-byte null terminated Object Name
  1969.  
  1970.           Output:
  1971.              connectionCount: Number of connections
  1972.              connections:     List of connection numbers, each one is 1 byte.
  1973.  
  1974.           Returns:            Result code (see Appendix I)
  1975.  
  1976.     4.1.8 GetStationAddress
  1977.  
  1978.           Returns the physical node address of the requesting workstation.
  1979.  
  1980.           void GetStationAddress(byte *physicalNodeAddress);
  1981.  
  1982.           Output:
  1983.              physicalNodeAddress:  6-byte physical address of the workstation.
  1984.  
  1985.     4.1.9 LoginObjectEncrypted
  1986.  
  1987.           Logs a bindery object into the default file server  using  encrypted
  1988.           passwords.This function must be used instead of LoginToFileServer if
  1989.           the version of Netware running  on  the  default  file  server  uses
  1990.           encrypted  passwords.   See the EncryptPassword function in the File
  1991.           Server Environment Services chapter.
  1992.  
  1993.           int LoginObjectEncrypted(word objectType,char *objectName,
  1994.                                    byte *encryptedPassword)
  1995.  
  1996.           Input:
  1997.              objectType:        Bindery object type
  1998.                                 (see Bindery Objects in Bindery Services)
  1999.              objectName:        48-byte null terminated Object name
  2000.              encryptedPassword: 8-byte encrypted password, returned by
  2001.                                 EncryptPassword.
  2002.  
  2003.           Returns:              Result code (see Appendix I)
  2004.  
  2005.  
  2006.  
  2007.  
  2008.  
  2009.  
  2010.  
  2011.  
  2012.                                                                                 
  2013. Netware C Library      Chapter Four - Connection Services              Page: 4-4
  2014. ────────────────────────────────────────────────────────────────────────────────
  2015.  
  2016.     4.1.10 LoginToFileServer
  2017.  
  2018.           Log a bindery object into the default file server.
  2019.  
  2020.           int LoginToFileServer(word objectType,char *objectName,
  2021.                                 char *objectPassword);
  2022.  
  2023.           Input:
  2024.              objectType:     Bindery object type
  2025.                              (see Bindery Objects in Bindery Services)
  2026.              objectName:     48-byte null terminated Object name
  2027.              objectPassword: 128-byte null terminated Object password.
  2028.  
  2029.           Returns:           Result code (see Appendix I)
  2030.  
  2031.     4.1.11 LogoutFromFileServer
  2032.  
  2033.           This logs the object out from the specified  server,  but  does  not
  2034.           detach the workstation from the server.
  2035.  
  2036.           void LogoutFromFileServer(char *serverName);
  2037.  
  2038.           Input:
  2039.              serverName: 48-byte null terminated Name of file server to
  2040.                          log out of.
  2041.  
  2042.     4.1.12 Logout
  2043.  
  2044.           This  closes  all  open  files belonging to the object, and logs the
  2045.           object out from all files servers.  It then detaches the workstation
  2046.           from all servers except the default one.
  2047.  
  2048.           void Logout(void);
  2049.  
  2050.  
  2051.  
  2052.  
  2053.  
  2054.  
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.                                                                                 
  2073. Netware C Library     Chapter Five - Workstation Services              Page: 5-1
  2074. ────────────────────────────────────────────────────────────────────────────────
  2075.  
  2076.                            5. Workstation Services
  2077.  
  2078.     These functions enable programs to get information  about  several  tables
  2079.     that are maintained by the workstation shell.
  2080.  
  2081. 5.1 Multiple Servers
  2082.  
  2083.     When multiple file servers are used,  then the following algorithm is used
  2084.     by Netware to determine which server to send the request to.
  2085.  
  2086.  
  2087.         1)  If  the  function  call requires a drive letter or a connection ID
  2088.             then the Server to which this points is used.
  2089.  
  2090.         2)  If a preferred file server has been set using a call to
  2091.             SetPreferredConnectionID, then send the request to this server.
  2092.  
  2093.         3)  If the default drive is a network drive, then send the request
  2094.             to the server associated with this drive.
  2095.  
  2096.         4)  Send the request to the primary server, which is the server the
  2097.             workstation is logged into unless changed by a call to
  2098.             SetPrimaryConnectionID.
  2099.  
  2100.         5)  Send the request to the first server in the Server Name Table.
  2101.             This is only if the connection to the primary server has been
  2102.             lost.
  2103.  
  2104. 5.2 Workstation Functions
  2105.  
  2106.     5.2.1 EndOfJob
  2107.  
  2108.           The workstation shell  will  automatically  issue  this  call when a
  2109.           program exits (i.e.  DOS functions 0x00 and 0x4c are actioned ),  so
  2110.           that  the workstation environment will be reset.  All resources used
  2111.           on the server, ( open files, locks etc.  ), will be released.
  2112.  
  2113.           void EndOfJob(void);
  2114.  
  2115.     5.2.2 GetConnectionIDTable
  2116.  
  2117.           This  returns  the  workstation  shells  Connection  ID  Table.  The
  2118.           structure  ConnectionIDTable  is  defined   in   the   header   file
  2119.           "wstation.h"
  2120.  
  2121.           int GetConnectionIDTable(CONNECTION_ID_TABLE *table);
  2122.  
  2123.           Output:
  2124.              table: Structure  containing  the  connection  ID  table for each
  2125.                     attached server.  This must be setup with at  least  eight
  2126.                     elements.  It is declared in the header file "wstation.h".
  2127.                     See Appendix III.
  2128.  
  2129.  
  2130.  
  2131.  
  2132.                                                                                 
  2133. Netware C Library     Chapter Five - Workstation Services              Page: 5-2
  2134. ────────────────────────────────────────────────────────────────────────────────
  2135.  
  2136.     5.2.3 GetDefaultConnectionID
  2137.  
  2138.           Returns the connection ID (1-8) of  the file server to which request
  2139.           packets are currently being sent.
  2140.  
  2141.           int GetDefaultConnectionID(void);
  2142.  
  2143.           Returns:    Default server connection ID (1-8)
  2144.  
  2145.     5.2.4 GetDriveConnectionID
  2146.  
  2147.           This returns the workstation shells Drive Connection ID  Table.   It
  2148.           consists of 32 1-byte entries and each entry contains the connection
  2149.           ID of the server that  is  associated  with  that drive.  A value of
  2150.           zero indicates that the drive is not mapped to a file  server,  i.e.
  2151.           it is a local drive or it is not used.
  2152.  
  2153.           void GetDriveConnectionID(char *table);
  2154.  
  2155.           Output:
  2156.              table:  32-byte string containing Drive Connection ID Table.
  2157.  
  2158.     5.2.5 GetDriveFlagTable
  2159.  
  2160.           This  returns  the workstation shells Drive Flag Table.  It consists
  2161.           of 32 1-byte entries and  each  entry contains the current status of
  2162.           the drive.
  2163.  
  2164.                  0x00    Not allocated
  2165.                  0x01    Permanent Network drive
  2166.                  0x02    Temporary Network drive
  2167.                  0x80    Local drive
  2168.                  0x81    Local drive allocated as a permanent Network drive
  2169.                  0x82    Local drive allocated as a temporary Network drive
  2170.  
  2171.           void GetDriveFlagTable(char *table);
  2172.  
  2173.           Output:
  2174.              table:  32-byte string containing the Drive Flag Table.
  2175.  
  2176.     5.2.6 GetDriveHandleTable
  2177.  
  2178.           Returns the workstation shells Drive Handle Table.  It  consists  of
  2179.           32  1-byte  entries  and each entry contains the directory handle on
  2180.           the file server.  A value of zero indicates a drive is not mapped to
  2181.           a directory.
  2182.  
  2183.           void GetDriveHandleTable(char *table);
  2184.  
  2185.           Output:
  2186.              table:  32-byte string containing the Drive Handle Table.
  2187.  
  2188.  
  2189.  
  2190.  
  2191.  
  2192.                                                                                 
  2193. Netware C Library     Chapter Five - Workstation Services              Page: 5-3
  2194. ────────────────────────────────────────────────────────────────────────────────
  2195.  
  2196.     5.2.7 GetFileServerTable
  2197.  
  2198.           Returns the workstation shells File  Server Name Table.  It consists
  2199.           of 8 48-byte entries  and  each  entry  contains  a  null-terminated
  2200.           server name.
  2201.  
  2202.           void GetFileServerTable(char *table);
  2203.  
  2204.          Output:
  2205.              table:  384-byte string containing the File Server Name Table.
  2206.  
  2207.     5.2.8 GetNetwareShellVersion
  2208.  
  2209.           Returns information about the workstations shell.
  2210.  
  2211.           void GetNetwareShellVersion(char *shellInfo,
  2212.                                       byte *majorVersion,byte *minorVersion,
  2213.                                       byte *revisionLevel);
  2214.  
  2215.           Output:
  2216.              shellInfo:      40-byte string containing the following four
  2217.                              null-terminated strings:
  2218.  
  2219.                                  1) Operating system type
  2220.                                  2) Operating system version
  2221.                                  3) Hardware type
  2222.                                  4) Short hardware type
  2223.  
  2224.              majorVersion:   Contains the major version number of the
  2225.                              workstations shell.
  2226.              minorVersion:   Contains the minor version number of the
  2227.                              workstations shell.
  2228.              revisionLevel:  Contains the revision number of the shell.
  2229.                              1 = A, 2 = B etc.
  2230.  
  2231.     5.2.9 GetNumberOfLocalDrives
  2232.  
  2233.           Returns the number of local drives on the workstation.
  2234.  
  2235.           int GetNumberOfLocalDrives(void);
  2236.  
  2237.           Returns:    Number of local drives.
  2238.  
  2239.     5.2.10 GetPreferredConnectionID
  2240.  
  2241.           This returns the connection ID of the preferred file server.
  2242.  
  2243.           int GetPreferredConnectionID(void);
  2244.  
  2245.           Returns:    The connection ID (1-8) of the Preferred File Server.
  2246.                       This has been set by calling SetPreferredConnectionID.
  2247.  
  2248.  
  2249.  
  2250.  
  2251.  
  2252.                                                                                 
  2253. Netware C Library     Chapter Five - Workstation Services              Page: 5-4
  2254. ────────────────────────────────────────────────────────────────────────────────
  2255.  
  2256.     5.2.11 GetPrimaryConnectionID
  2257.  
  2258.           This returns the connection ID of the primary file server.
  2259.  
  2260.           int GetPrimaryConnectionID(void);
  2261.  
  2262.           Returns:    The connection ID (1-8) of the Primary File Server.
  2263.                       This has been set by calling SetPrimaryConnectionID.
  2264.  
  2265.     5.2.12 GetServerConnectionID
  2266.  
  2267.           Get the connection ID of the specified server.
  2268.  
  2269.           int GetServerConnectionID(char *serverName,int *connectionID);
  2270.  
  2271.           Input:
  2272.              serverName:     48-byte null terminated server name
  2273.  
  2274.           Output:
  2275.              connectionID:   The connection ID of the specified server (1-8)
  2276.  
  2277.           Returns:           Result code (see Appendix I)
  2278.  
  2279.     5.2.13 IsShellLoaded
  2280.  
  2281.           Checks whether a netware shell is loaded in the workstation.
  2282.  
  2283.           int IsShellLoaded(void);
  2284.  
  2285.           Returns:           0x00 - Shell Loaded
  2286.                              0xbb - No Shell Loaded
  2287.  
  2288.     5.2.14 SetEndofJobStatus
  2289.  
  2290.           This  enables\disables the end of job performed automatically by the
  2291.           workstation shell when control returns to "COMMAND.COM".
  2292.  
  2293.           int SetEndofJobStatus(int NewStatus);
  2294.  
  2295.           Input:
  2296.              NewStatus:  New end of job flag, 0 = Disabled, 1 = Enabled.
  2297.  
  2298.           Returns:       Original end of job flag.
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.                                                                                 
  2313. Netware C Library     Chapter Five - Workstation Services              Page: 5-5
  2314. ────────────────────────────────────────────────────────────────────────────────
  2315.  
  2316.     5.2.15 SetNWErrorMode
  2317.  
  2318.           This sets the workstation shell  to  determine how it should respond
  2319.           to DOS emulation call errors.  It has three modes :-
  2320.  
  2321.             Mode:   0   This is the default, it uses the normal response
  2322.                         format used by DOS. (i.e. "Abort, Retry, Fail")
  2323.  
  2324.                     1   This will not invoke the normal INT 24h handler, but
  2325.                         will return the error code for all file I/O calls in
  2326.                         AL.
  2327.  
  2328.                     2   The shell will attempt to map the Netware error code
  2329.                         to a DOS error code and return it.
  2330.  
  2331.           int SetNWErrorMode(int NewMode);
  2332.  
  2333.           Input:
  2334.              NewMode:    New error mode.
  2335.  
  2336.           Returns:       Original error mode.
  2337.  
  2338.     5.2.16 SetPreferredConnectionID
  2339.  
  2340.           This sets the preferred file server.
  2341.  
  2342.           void SetPreferredConnectionID(int connection_id);
  2343.  
  2344.           Input:
  2345.              connection_id:  The connection ID (1-8) of the preferred server.
  2346.  
  2347.     5.2.17 SetPrimaryConnectionID
  2348.  
  2349.           This sets the primary file server.
  2350.  
  2351.           void SetPrimaryConnectionID(int connection_id);
  2352.  
  2353.           Input:
  2354.              connection_id:  The connection ID (1-8) of the primary server.
  2355.  
  2356.  
  2357.  
  2358.  
  2359.  
  2360.  
  2361.  
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.                                                                                 
  2373. Netware C Library        Chapter Six - Message Services                Page: 6-1
  2374. ────────────────────────────────────────────────────────────────────────────────
  2375.  
  2376.                                6. Message Services
  2377.  
  2378.     These calls enable applications to send messages to specified connections.
  2379.     The  sending  and  destination  stations must both be attached to the same
  2380.     server.   The messages can either  be broadcast messages or pipe messages.
  2381.     Each connection on a file server has a 55-byte  message  buffer  which  is
  2382.     used  for  broadcast  messages,   and  a  six  slot message queue for pipe
  2383.     messages where  each  slot  can  hold  a  126-byte  message.   Before pipe
  2384.     messages can be used,  the sending and receiving connections must  open  a
  2385.     message pipe with the OpenMessagePipe function.
  2386.  
  2387. 6.1 Message Functions
  2388.  
  2389.     6.1.1 BroadcastToConsole
  2390.  
  2391.           Broadcast a message to the default file servers system console.
  2392.  
  2393.           int BroadcastToConsole(char *message);
  2394.  
  2395.           Input:
  2396.              message:    60-byte null terminated string containing message to
  2397.                          broadcast on the servers console.
  2398.  
  2399.           Returns:       Result code (see Appendix I)
  2400.  
  2401.     6.1.2 CheckPipeStatus
  2402.  
  2403.           This call enables the  status  of  one  or  more message pipes to be
  2404.           checked.
  2405.  
  2406.           int CheckPipeStatus(byte connectionCount,byte *connections,
  2407.                               byte *pipeStatus);
  2408.  
  2409.           Input:
  2410.              connectionCount: Number of message pipes (1-100) that are to be
  2411.                               checked.
  2412.              connections:     List of the connections whose message pipe is
  2413.                               to be checked. There must be "connectionCount"
  2414.                               entries, and each entry has a corresponding
  2415.                               entry in the "pipeStatus" below.
  2416.  
  2417.           Output:
  2418.              pipeStatus:      This contains a code for each specified
  2419.                               connection.
  2420.  
  2421.                                  0x00    OPEN. The message pipe is complete
  2422.                                          at both ends.
  2423.                                  0xfe    INCOMPLETE. The target connections
  2424.                                          half of the message pipe does not
  2425.                                          exist.
  2426.                                  0xff    CLOSED. The callers half of the
  2427.                                          message pipe does not exist, or the
  2428.                                          connection number is not in use or is
  2429.                                          invalid.
  2430.  
  2431.           Returns:            Result code (see Appendix I)
  2432.                                                                                 
  2433. Netware C Library        Chapter Six - Message Services                Page: 6-2
  2434. ────────────────────────────────────────────────────────────────────────────────
  2435.  
  2436.     6.1.3 CloseMessagePipe
  2437.  
  2438.           This call closes this workstations  half  of  one  or  more  message
  2439.           pipes.
  2440.  
  2441.           int CloseMessagePipe(byte connectionCount,byte *connections,
  2442.                                byte *resultCodes);
  2443.  
  2444.           Input:
  2445.              connectionCount: Number of message pipes (1-100) that are to be
  2446.                               closed.
  2447.              connections:     List of the connections whose message pipe is
  2448.                               to be closed. There must be "connectionCount"
  2449.                               entries, and each entry has a corresponding
  2450.                               entry in the "resultCodes" below.
  2451.  
  2452.           Output:
  2453.              resultCodes:     This contains a code for each specified
  2454.                               connection.
  2455.  
  2456.                                  0x00    Successful. The message pipe was
  2457.                                          successfully closed.
  2458.                                  0xfd    Failure. The target connection is no
  2459.                                          longer valid.
  2460.                                  0xff    No Pipe. There is no pipe to close.
  2461.  
  2462.           Returns:            Result code (see Appendix I)
  2463.  
  2464.     6.1.4 GetBroadcastMessage
  2465.  
  2466.           This  is  used to poll for and retrieve a broadcast message from the
  2467.           default file server.
  2468.  
  2469.           int GetBroadcastMessage(char *message)
  2470.  
  2471.           Output:
  2472.              message:    56-byte null terminated retrieved message. If the
  2473.                          returned message has a length of zero then there was
  2474.                          no message waiting.
  2475.  
  2476.           Returns:       Result code (see Appendix I)
  2477.  
  2478.  
  2479.  
  2480.  
  2481.  
  2482.  
  2483.  
  2484.  
  2485.  
  2486.  
  2487.  
  2488.  
  2489.  
  2490.  
  2491.  
  2492.                                                                                 
  2493. Netware C Library        Chapter Six - Message Services                Page: 6-3
  2494. ────────────────────────────────────────────────────────────────────────────────
  2495.  
  2496.     6.1.5 GetBroadcastMode
  2497.  
  2498.           Returns the message mode of the requesting workstation.
  2499.  
  2500.           int GetBroadcastMode(void);
  2501.  
  2502.           Returns: Message mode which can be one of the following :-
  2503.  
  2504.                     0x00 Attached servers will store both user and server
  2505.                          messages intended for this workstation. The
  2506.                          workstation shell will automatically retrieve and
  2507.                          display these messages.
  2508.                     0x01 Attached servers will store server messages intended
  2509.                          for this workstation, but all user messages will be
  2510.                          discarded. The workstation shell will automatically
  2511.                          retrieve and display these messages.
  2512.                     0x02 Attached servers will store server messages intended
  2513.                          for this workstation, but all user messages will be
  2514.                          discarded. The workstation shell will not retrieve
  2515.                          these messages automatically, but a program can call
  2516.                          GetBroadcastMessage to poll for and retrieve the
  2517.                          most recently stored message.
  2518.                     0x03 Attached servers will store both user and server
  2519.                          messages intended for this workstation. The
  2520.                          workstation shell will not retrieve these messages
  2521.                          automatically, but a program can  poll for and
  2522.                          retrieve the most recently stored message by making
  2523.                          a call to GetBroadcastMessage.
  2524.  
  2525.     6.1.6 GetPersonalMessage
  2526.  
  2527.           This retrieves the oldest  message  from this connections pipe queue
  2528.           on the default file server.
  2529.  
  2530.           int GetPersonalMessage(char *message,byte *sourceConnection);
  2531.  
  2532.           Output:
  2533.              message:          126-byte null terminated retrieved message. If
  2534.                                the returned message has a length of zero then
  2535.                                there was no message in the pipe queue.
  2536.              sourceConnection: This is the connection number of the sending
  2537.                                station. If this is zero then there was no
  2538.                                message in the pipe queue.
  2539.  
  2540.           Returns:             Result code (see Appendix I)
  2541.  
  2542.  
  2543.  
  2544.  
  2545.  
  2546.  
  2547.  
  2548.  
  2549.  
  2550.  
  2551.  
  2552.                                                                                 
  2553. Netware C Library        Chapter Six - Message Services                Page: 6-4
  2554. ────────────────────────────────────────────────────────────────────────────────
  2555.  
  2556.     6.1.7 LogNetworkMessage
  2557.  
  2558.           This logs a message in the default  file  servers  NET$LOG.MSG  file
  2559.           which   is  held  in  the  SYS:SYSTEM  directory.   The  message  is
  2560.           automatically prefixed with the date and time and logical connection
  2561.           number.
  2562.  
  2563.           void LogNetworkMessage(char *message);
  2564.  
  2565.           Input:
  2566.              message:    80-byte null terminated message to write to the
  2567.                          log file.
  2568.  
  2569.     6.1.8 OpenMessagePipe
  2570.  
  2571.           This creates the calling  connections  half  of  one or more message
  2572.           pipes.  Before 2 connections can exchange pipe messages,  both  must
  2573.           establish a connection by calling this function.
  2574.  
  2575.           int OpenMessagePipe(byte connectionCount,byte *connections,
  2576.                               byte *resultCodes);
  2577.  
  2578.           Input:
  2579.              connectionCount:Number of connections (1-100) to which this
  2580.                              workstation opens a pipe.
  2581.              connections:    List of the connections to which this workstation
  2582.                              opens a pipe.
  2583.  
  2584.           Output:
  2585.              resultCodes:    This contains a result code for each connection
  2586.                              specified in the "connections" field:
  2587.  
  2588.                                 0x00    Successful. The message pipe is
  2589.                                         complete at both ends.
  2590.                                 0xfe    Incomplete Pipe. The connections has
  2591.                                         not yet created its half of the pipe.
  2592.                                 0xff    Failure. The connection is not valid,
  2593.                                         or the connection is not in use.
  2594.  
  2595.           Returns:           Result code (see Appendix I)
  2596.  
  2597.     6.1.9 SendBroadcastMessage
  2598.  
  2599.           This  sends  a broadcast message to the specified connections on the
  2600.           default file server.
  2601.  
  2602.           int SendBroadcastMessage( byte connectionCount,byte *connections,
  2603.                                     char *message , byte *resultCodes);
  2604.  
  2605.           Input:
  2606.              connectionCount:Number of connections (1-100) that are to be
  2607.                              broadcast.
  2608.              connections:    List of the connections who are to receive the
  2609.                              broadcast message.
  2610.              message:        55-byte null terminated message to be broadcast.
  2611.  
  2612.                                                                                 
  2613. Netware C Library        Chapter Six - Message Services                Page: 6-5
  2614. ────────────────────────────────────────────────────────────────────────────────
  2615.  
  2616.           Output:
  2617.              resultCodes:    This contains a result code for each connection
  2618.                              specified in the "connections" field:
  2619.  
  2620.                                 0x00    Successful. The message was stored in
  2621.                                         the connections message buffer.
  2622.                                 0xfc    Rejected. The connections message
  2623.                                         buffer already contains a message.
  2624.                                 0xfd    Invalid Connection. The connection
  2625.                                         number is not known.
  2626.                                 0xff    Blocked. The connections message mode
  2627.                                         is set to block messages, or the
  2628.                                         connection is not in use.
  2629.  
  2630.           Returns:           Result code (see Appendix I)
  2631.  
  2632.     6.1.10 SendPersonalMessage
  2633.  
  2634.           This sends  a  pipe  message  to  the  specified  connections on the
  2635.           default file server.  Before  this  can  be  called,  the  procedure
  2636.           OpenPipeMessage  must  have  been  called  by  both  the sending and
  2637.           receiving workstations.
  2638.  
  2639.           int SendPersonalMessage( byte connectionCount,byte *connections,
  2640.                                    char *message , byte *resultCodes);
  2641.  
  2642.           Input:
  2643.              connectionCount:Number of connections (1-100) that are to receive
  2644.                              the message.
  2645.              connections:    List of the connections who are to receive the
  2646.                              message.
  2647.              message:        126-byte null terminated message to be sent.
  2648.  
  2649.           Output:
  2650.              resultCodes:    This contains a result code for each connection
  2651.                              specified in the "connections" field:
  2652.  
  2653.                                 0x00    Successful. The message was stored in
  2654.                                         the connections pipe queue.
  2655.                                 0xfc    Rejected. The connections pipe queue
  2656.                                         is full (six slots already in use).
  2657.                                 0xfe    Incomplete Pipe. The connections pipe
  2658.                                         half does not exist.
  2659.                                 0xff    Failure. The source connectiosn pipe
  2660.                                         half does not exist, or the connection
  2661.                                         number is not in use.
  2662.  
  2663.           Returns:           Result code (see Appendix I)
  2664.  
  2665.  
  2666.  
  2667.  
  2668.  
  2669.  
  2670.  
  2671.  
  2672.                                                                                 
  2673. Netware C Library        Chapter Six - Message Services                Page: 6-6
  2674. ────────────────────────────────────────────────────────────────────────────────
  2675.  
  2676.     6.1.11 SetBroadcastMode
  2677.  
  2678.           Set the message mode for the requesting workstation.
  2679.  
  2680.           int SetBroadcastMode(int messageMode);
  2681.  
  2682.           Input:
  2683.              messageMode:    Message mode to set :-
  2684.  
  2685.                     0x00 Attached servers will store both user and server
  2686.                          messages intended for this workstation. The
  2687.                          workstation shell will automatically retrieve and
  2688.                          display these messages.
  2689.                     0x01 Attached servers will store server messages intended
  2690.                          for this workstation, but all user messages will be
  2691.                          discarded. The workstation shell will automatically
  2692.                          retrieve and display these messages.
  2693.                     0x02 Attached servers will store server messages intended
  2694.                          for this workstation, but all user messages will be
  2695.                          discarded. The workstation shell will not retrieve
  2696.                          these messages automatically, but a program can call
  2697.                          GetBroadcastMessage to poll for and retrieve the
  2698.                          most recently stored message.
  2699.                     0x03 Attached servers will store both user and server
  2700.                          messages intended for this workstation. The
  2701.                          workstation shell will not retrieve these messages
  2702.                          automatically, but a program can  poll for and
  2703.                          retrieve the most recently stored message by making
  2704.                          a call to GetBroadcastMessage.
  2705.  
  2706.           Returns:           Message mode that was set.
  2707.  
  2708.  
  2709.  
  2710.  
  2711.  
  2712.  
  2713.  
  2714.  
  2715.  
  2716.  
  2717.  
  2718.  
  2719.  
  2720.  
  2721.  
  2722.  
  2723.  
  2724.  
  2725.  
  2726.  
  2727.  
  2728.  
  2729.  
  2730.  
  2731.  
  2732.                                                                                 
  2733. Netware C Library        Chapter Seven - File Services                 Page: 7-1
  2734. ────────────────────────────────────────────────────────────────────────────────
  2735.  
  2736.                                7. File Services
  2737.  
  2738.     The file services include calls that  enable  applications  to  manipulate
  2739.     extended file attributes,  restore erased files,  permanently delete files
  2740.     and  set  file  information.
  2741.  
  2742. 7. 1 Directory Handles
  2743.  
  2744.     Most of the calls in the File services identify files by specifying a file
  2745.     path and a directory handle.   A directory handle is a value from 1 to 255
  2746.     which references a  volume  or  directory.    For  the function calls that
  2747.     require a directory handle then zero can be supplied,  but the volume name
  2748.     must be specified in the file path.
  2749.  
  2750.     For  more  information  about  directory handles and where they are stored
  2751.     then see the section on Directory Services.
  2752.  
  2753. 7.2 Search Attributes
  2754.  
  2755.     Some functions within the File services can act on  normal,   hidden,   or
  2756.     system  files.    These  depend  on  the  value  of  the search attributes
  2757.     parameter.
  2758.  
  2759.     The following values can be supplied :-
  2760.  
  2761.             0  -  Normal files only
  2762.             2  -  Normal and Hidden files
  2763.             4  -  Normal and System files
  2764.             6  -  Normal, Hidden and System files
  2765.  
  2766. 7.3 File Attributes
  2767.  
  2768.     These are held as 1 byte, and contain the following settings:
  2769.  
  2770.         Bits    7 6 5 4 3 2 1 0
  2771.                 - - - - - - - x Read only
  2772.                 - - - - - - x - Hidden File (not shown on directory listing)
  2773.                 - - - - - x - - System File (not shown on directory listing)
  2774.                 - - - - x - - - Execute only
  2775.                 - - - x - - - - Entry is a subdirectory
  2776.                 - - x - - - - - Needs to be archived
  2777.                 - x - - - - - - Not used
  2778.                 x - - - - - - - File is shareable
  2779.  
  2780.  
  2781.  
  2782.  
  2783.  
  2784.  
  2785.  
  2786.  
  2787.  
  2788.  
  2789.  
  2790.  
  2791.  
  2792.                                                                                 
  2793. Netware C Library        Chapter Seven - File Services                 Page: 7-2
  2794. ────────────────────────────────────────────────────────────────────────────────
  2795.  
  2796. 7.4 Extended File Attributes
  2797.  
  2798.     These,   like  the  file attributes,  are held as 1 byte,  and contain the
  2799.     following settings:
  2800.  
  2801.         Bits    7 6 5 4 3 2 1 0
  2802.                 - - - - - x x x Search mode bits (see below)
  2803.                 - - - - x - - - Reserved
  2804.                 - - - x - - - - Transaction bit ( used by TTS )
  2805.                 - - x - - - - - Index bit (file allocation table is indexed
  2806.                                 for faster access, should be set if the file
  2807.                                 is larger than 2 MB)
  2808.                 - x - - - - - - Read audit bit ( not used currently )
  2809.                 x - - - - - - - Write audit bit ( not used currently )
  2810.  
  2811.         The  search  mode bits are only applicable for executable files,  they
  2812.         specify how the Netware shell  should  search  for any files that this
  2813.         file opens whilst it is running.  The following values are defined:
  2814.  
  2815.                 0   No mode, use the shell's default search mode.
  2816.                 1   Search for files in the current directory and then in the
  2817.                     current search drives, only if no path is specified.
  2818.                 2   Search for files in the current directory only.
  2819.                 3   Search current directory and then in the current search
  2820.                     drives, only if the file is being opened in read-only
  2821.                     mode and no path has been specified.
  2822.                 5   Search for files in the current directory and then in the
  2823.                     current search drives regardless of whether a drive or
  2824.                     directory is specified.
  2825.                 7   Search for files in the current directory and then in the
  2826.                     current search drives regardless of whether a drive or
  2827.                     directory is specified, but only if the file is being
  2828.                     opened in read-only mode.
  2829.  
  2830. 7.5 File Functions
  2831.  
  2832.     7.5.1 EraseFiles
  2833.  
  2834.           This marks the specified file for deletion.
  2835.  
  2836.           int EraseFiles( byte searchAttributes,
  2837.                           byte directoryHandle,char *filePath);
  2838.  
  2839.           Input:
  2840.              searchAttributes: This is the type of file to be deleted.
  2841.              directoryHandle:  An optional directory handle, pointing to an
  2842.                                entry in the servers Directory Handle Table.
  2843.              filePath:         256-byte null terminated directory path name.
  2844.                                This can either be a full path name,
  2845.                                i.e. VOLUME:DIR\..\DIR in which case the
  2846.                                directory handle must be 0x00, or a partial
  2847.                                directory name which will be used in
  2848.                                conjunction with the directory handle.
  2849.  
  2850.           Returns:             Result code (see Appendix I)
  2851.  
  2852.                                                                                 
  2853. Netware C Library        Chapter Seven - File Services                 Page: 7-3
  2854. ────────────────────────────────────────────────────────────────────────────────
  2855.  
  2856.     7.5.2 PurgeAllErasedFiles                                       (Operator)
  2857.  
  2858.           This permanently  deletes  all  files  marked  for  deletion  by all
  2859.           workstations on the network.
  2860.  
  2861.           int PurgeAllErasedFiles(void);
  2862.  
  2863.           Returns:    Result code (see Appendix I)
  2864.  
  2865.     7.5.3 PurgeErasedFiles
  2866.  
  2867.           This permanently deletes all  files  marked  for  deletion  by  this
  2868.           workstation.
  2869.  
  2870.           int PurgeErasedFiles(void);
  2871.  
  2872.           Returns:    Result code (see Appendix I)
  2873.  
  2874.     7.5.4 ScanFileInformation
  2875.  
  2876.           Return  information about the specified file.  This call can be made
  2877.           iteratively  to  return  information  about  a  group  of  files  by
  2878.           including wildcards in the filepath.
  2879.  
  2880.           int ScanFileInformation(byte directoryHandle, char *filePath,
  2881.                                   byte searchAttributes,int *sequenceNumber,
  2882.                                   char *fileName,byte *fileAttributes,
  2883.                                   byte *extendedFileAttributes,long *fileSize,
  2884.                                   char *creationDate,char *lastAccessDate,
  2885.                                   char *lastUpdateDateAndTime,
  2886.                                   char *lastArchiveDateAndTime,
  2887.                                   long *fileOwnerId)
  2888.  
  2889.           Input:
  2890.              directoryHandle:        An optional directory handle, pointing to
  2891.                                      an entry in the servers Directory Handle
  2892.                                      Table. If "filePath" contains the full
  2893.                                      path name then this must be 0x00.
  2894.              filePath:               256-byte null terminated directory path
  2895.                                      name. This can either be a full path name,
  2896.                                      i.e. VOLUME:DIR\..\DIR in which case
  2897.                                      source directory handle must be 0x00, or
  2898.                                      a partial directory name which will be
  2899.                                      used in conjunction with the directory
  2900.                                      handle.
  2901.              searchAttributes:       This is the type of file to be scanned
  2902.                                      for. (see section 7.2)
  2903.              sequenceNumber:         On the first call this must contain -1.
  2904.                                      Do not alter for subsequent calls.
  2905.  
  2906.           Output:
  2907.              sequenceNumber:         Returns the sequence number of the next
  2908.                                      file.
  2909.              fileName:               15-byte null terminated file name.
  2910.              fileAttributes:         Files attributes (see section 7.3)
  2911.              extendedFileAttributes: Extended attributes (see section 7.4)
  2912.                                                                                 
  2913. Netware C Library        Chapter Seven - File Services                 Page: 7-4
  2914. ────────────────────────────────────────────────────────────────────────────────
  2915.  
  2916.              fileSize:               This is the size of the file in bytes.
  2917.              creationDate:           Date the file was created:
  2918.  
  2919.                                           Byte
  2920.                                            0   Year   (0 to 99, where 80=1980,
  2921.                                                        1=1981 etc. Howver a
  2922.                                                        value less than 80 is
  2923.                                                        considered to be in the
  2924.                                                        21st century.)
  2925.                                            1   Month  (1 to 12)
  2926.                                            2   Day    (1 to 31)
  2927.  
  2928.              lastAccessDate:         Date the file was last accessed. Same
  2929.                                      format as "creationDate".
  2930.              lastUpdateDateAndTime:  Date and time the file was last updated:
  2931.  
  2932.                                           Byte
  2933.                                            0   Year   (0 to 99, where 80=1980,
  2934.                                                        1=1981 etc. Howver a
  2935.                                                        value less than 80 is
  2936.                                                        considered to be in the
  2937.                                                        21st century.)
  2938.                                            1   Month  (1 to 12)
  2939.                                            2   Day    (1 to 31)
  2940.                                            3   Hour   (0 to 23)
  2941.                                            4   Minute (0 to 59)
  2942.                                            5   Second (0 to 59)
  2943.  
  2944.              lastArchiveDateAndTime: Date and time the file was last archived.
  2945.                                      same format as "lastUpdateDateAndTime".
  2946.              fileOwnerId:            The bindery object ID of the user who
  2947.                                      created the file.
  2948.  
  2949.           Returns:                   Result code (see Appendix I)
  2950.  
  2951.  
  2952.  
  2953.  
  2954.  
  2955.  
  2956.  
  2957.  
  2958.  
  2959.  
  2960.  
  2961.  
  2962.  
  2963.  
  2964.  
  2965.  
  2966.  
  2967.  
  2968.  
  2969.  
  2970.  
  2971.  
  2972.                                                                                 
  2973. Netware C Library      Chapter Eight - Directory Services              Page: 8-1
  2974. ────────────────────────────────────────────────────────────────────────────────
  2975.  
  2976.                             8. Directory Services
  2977.  
  2978.     These calls can allocate and deallocate directory handles; create,  rename
  2979.     and destroy  directories;   add  and  delete  directory  trustees;  return
  2980.     information about volumes  and  directories;   and  modify  a  directories
  2981.     maximum rights mask.
  2982.  
  2983. 8.1 Directory Handle Table
  2984.  
  2985.     Every  connection  on  a  file  server  has  the ability to have up to 256
  2986.     directory handles,  these are held  on  the server in the Directory Handle
  2987.     Table,  one table for each connection, each table contains 256 slots where
  2988.     each slot represents a directory handle.   A directory handle is a number,
  2989.     1 to 255,  that points to a volume or a directory path.   Once a directory
  2990.     handle has been set this can be used when a volume or directory path needs
  2991.     to be specified.
  2992.  
  2993. 8.2 Drive Handle Table
  2994.  
  2995.     This  is  maintained  by  the workstations shell program.   It contains 32
  2996.     1-byte entries.   The first 26 slots represent the permanent drive letters
  2997.     A-Z, the last six slots represent the temporary drive letters:-
  2998.  
  2999.                 [   (left square bracket)
  3000.                 \   (backslash)
  3001.                 ]   (right square bracket)
  3002.                 ^   (caret)
  3003.                 _   (underline)
  3004.                 '   (apostrophe)
  3005.  
  3006.     Each slot in the table contains a directory handle number.
  3007.  
  3008. 8.3 Drive Flag Table
  3009.  
  3010.     This  is  maintained  by  the workstations shell program.   It contains 32
  3011.     1-byte entries.   The first 26 slots represent the permanent drive letters
  3012.     A-Z, the last six slots represent the temporary drive letters:-
  3013.  
  3014.                 [   (left square bracket)
  3015.                 \   (backslash)
  3016.                 ]   (right square bracket)
  3017.                 ^   (caret)
  3018.                 _   (underline)
  3019.                 '   (apostrophe)
  3020.  
  3021.     Each slot in the table contains a value which defines the type of drive:
  3022.  
  3023.                 0x00    Not allocated
  3024.                 0x01    Permanent Network drive
  3025.                 0x02    Temporary Network drive
  3026.                 0x80    Local drive
  3027.                 0x81    Local drive allocated as a permanent network drive
  3028.                 0x82    Local drive allocated as a temporary network drive
  3029.  
  3030.  
  3031.  
  3032.                                                                                 
  3033. Netware C Library      Chapter Eight - Directory Services              Page: 8-2
  3034. ────────────────────────────────────────────────────────────────────────────────
  3035.  
  3036. 8.4 Drive Connection ID Table
  3037.  
  3038.     This  is  maintained  by  the workstations shell program.   It contains 32
  3039.     1-byte entries.   The first 26 slots represent the permanent drive letters
  3040.     A-Z, the last six slots represent the temporary drive letters:-
  3041.  
  3042.                 [   (left square bracket)
  3043.                 \   (backslash)
  3044.                 ]   (right square bracket)
  3045.                 ^   (caret)
  3046.                 _   (underline)
  3047.                 '   (apostrophe)
  3048.  
  3049.     Each slot contains a value,  0 to 8, identifying the server to  which  the
  3050.     drive  letter  is  mapped.    A value of 0 indicates that the drive is not
  3051.     mapped,  a value of  1-8  represents  the  position  of  the server in the
  3052.     workstations Server Name Table.
  3053.  
  3054. 8.5 Trustee Rights
  3055.  
  3056.     A users trustee rights and a directories maximum rights are held as 1 byte
  3057.     consisting of the following settings:-
  3058.  
  3059.             (MSB)   Bit 7:  Modify (file attributes can be modified)
  3060.                         6:  Search (directory can be searched)
  3061.                         5:  Parental (subdirectories can be created/deleted
  3062.                                       & trustee rights granted/revoked)
  3063.                         4:  Delete (files can be deleted)
  3064.                         3:  Create (files can be created)
  3065.                         2:  Open (files can be opened)
  3066.                         1:  Write (file writes allowed)
  3067.             (LSB)       0:  Read (file reads allowed)
  3068.  
  3069.     When a users trustee  rights  and  a  directories  maximum rights mask are
  3070.     logically anded together,  they produce a users effective  rights  in  the
  3071.     specified directory.
  3072.  
  3073. 8.6 Directory Functions
  3074.  
  3075.     8.6.1 AddTrusteeToDirectory
  3076.  
  3077.           Add  a  trustee  to  a  directories  trustee  list.   The requesting
  3078.           workstation must have parental rights to the target directory, or to
  3079.           a parent directory.
  3080.  
  3081.  
  3082.           int AddTrusteeToDirectory(byte directoryHandle,char *directoryPath,
  3083.                                     long trusteeObjectID,
  3084.                                     byte trusteeRightsMask);
  3085.  
  3086.           Input:
  3087.              directoryHandle:   An optional directory handle, pointing to an
  3088.                                 entry in the servers Directory Handle Table.
  3089.                                 If "directoryPath" contains the full pathname
  3090.                                 then this must be 0x00.
  3091.  
  3092.                                                                                 
  3093. Netware C Library      Chapter Eight - Directory Services              Page: 8-3
  3094. ────────────────────────────────────────────────────────────────────────────────
  3095.  
  3096.              directoryPath:     256-byte null terminated directory path name.
  3097.                                 This can either be a full path name, i.e.
  3098.                                 VOLUME:DIR\..\DIR or a partial name containing
  3099.                                 at least a directory name.
  3100.              trusteeObjectID:   Bindery object ID of user name to add to
  3101.                                 the specified directories trustee list.
  3102.              trusteeRightsMask: The rights mask to be given to the user.
  3103.                                 If the user is already a trustee in the
  3104.                                 specified directory, then this replaces the
  3105.                                 existing rights.
  3106.  
  3107.           Returns:              Result code (see Appendix I)
  3108.  
  3109.     8.6.2 AllocPermanentDirectoryHandle
  3110.  
  3111.           Permanently assign a workstation drive to a network directory.
  3112.  
  3113.           int AllocPermanentDirectoryHandle(byte directoryHandle,
  3114.                                             char *directoryPath,
  3115.                                             char driveLetter,
  3116.                                             byte *newDirectoryHandle,
  3117.                                             byte *effectiveRightsMask);
  3118.  
  3119.           Input:
  3120.              directoryHandle:     An optional directory handle, pointing to
  3121.                                   an entry in the servers Directory Handle
  3122.                                   Table. If "directoryPath" contains the
  3123.                                   full path name then this must be 0x00.
  3124.              directoryPath:       256-byte null terminated directory path
  3125.                                   name. This can either be a full path name,
  3126.                                   i.e. VOLUME:DIR\..\DIR or a partial name
  3127.                                   containing at least a directory name.
  3128.              driveLetter:         Drive letter to assign to the specified
  3129.                                   directory.
  3130.  
  3131.           Output:
  3132.              newDirectoryHandle:  The new directory handle pointing to the
  3133.                                   specified directory.
  3134.              effectiveRightsMask: This is the result of logically anding
  3135.                                   the users trustee rights with the
  3136.                                   directories maximum rights.
  3137.  
  3138.           Returns:                Result code (see Appendix I)
  3139.  
  3140.     8.6.3 AllocTemporaryDirectoryHandle
  3141.  
  3142.           Temporarily assign a workstation drive to a network directory.   The
  3143.           allocation is only valid until the application executes an EndOfJob,
  3144.           or     until     the     job     deallocates    the    drive    with
  3145.           DeallocateDirectoryHandle.
  3146.  
  3147.           int AllocTemporaryDirectoryHandle(byte directoryHandle,
  3148.                                             char *directoryPath,
  3149.                                             char driveLetter,
  3150.                                             byte *newDirectoryHandle,
  3151.                                             byte *effectiveRightsMask);
  3152.                                                                                 
  3153. Netware C Library      Chapter Eight - Directory Services              Page: 8-4
  3154. ────────────────────────────────────────────────────────────────────────────────
  3155.  
  3156.           Input:
  3157.              directoryHandle:     An optional directory handle, pointing to
  3158.                                   an entry in the servers Directory Handle
  3159.                                   Table. If "directoryPath" contains the
  3160.                                   full path name then this must be 0x00.
  3161.              directoryPath:       256-byte null terminated directory path
  3162.                                   name. This can either be a full path name,
  3163.                                   i.e. VOLUME:DIR\..\DIR or a partial name
  3164.                                   containing at least a directory name.
  3165.              driveLetter:         Drive letter to assign to the specified
  3166.                                   directory.
  3167.  
  3168.           Output:
  3169.              newDirectoryHandle:  The new directory handle pointing to the
  3170.                                   specified directory.
  3171.              effectiveRightsMask: This is the result of logically anding
  3172.                                   the users trustee rights with the
  3173.                                   directories maximum rights.
  3174.  
  3175.           Returns:                Result code (see Appendix I)
  3176.  
  3177.     8.6.4 CreateDirectory
  3178.  
  3179.           This creates a subdirectory under  the directory which is pointed to
  3180.           by "directoryHandle".
  3181.  
  3182.           int CreateDirectory(byte directoryHandle,byte maximumRightsMask,
  3183.                               char *directoryPath);
  3184.  
  3185.           Input:
  3186.              directoryHandle:   An optional directory handle, pointing to
  3187.                                 an entry in the servers Directory Handle
  3188.                                 Table. If "directoryPath" contains the
  3189.                                 full path name then this must be 0x00.
  3190.              maximumRightsMask: This indicates the maximu rights that a
  3191.                                 user can have in this directory.
  3192.              directoryPath:     256-byte null terminated directory path
  3193.                                 name. This can either be a full path name,
  3194.                                 i.e. VOLUME:DIR\..\DIR or a partial name
  3195.                                 containing at least a directory name.
  3196.  
  3197.           Returns:              Result code (see Appendix I)
  3198.  
  3199.     8.6.5 DeallocateDirectoryHandle
  3200.  
  3201.           Deallocate a permanent or temporary directory handle.
  3202.  
  3203.           int DeallocateDirectoryHandle(byte directoryHandle);
  3204.  
  3205.           Input:
  3206.              directoryHandle:    Directory handle to deallocate.
  3207.  
  3208.           Returns:               Result code (see Appendix I)
  3209.  
  3210.  
  3211.  
  3212.                                                                                 
  3213. Netware C Library      Chapter Eight - Directory Services              Page: 8-5
  3214. ────────────────────────────────────────────────────────────────────────────────
  3215.  
  3216.     8.6.6 DeleteDirectory
  3217.  
  3218.           int DeleteDirectory(byte directoryHandle,char *directoryPath);
  3219.  
  3220.           Input:
  3221.              directoryHandle:   An optional directory handle, pointing to
  3222.                                 an entry in the servers Directory Handle
  3223.                                 Table. If "directoryPath" contains the
  3224.                                 full path name then this must be 0x00.
  3225.              directoryPath:     256-byte null terminated directory path
  3226.                                 name. This can either be a full path name,
  3227.                                 i.e. VOLUME:DIR\..\DIR or a partial name
  3228.                                 containing at least a directory name.
  3229.  
  3230.           Returns:              Result code (see Appendix I)
  3231.  
  3232.     8.6.7 DeleteFakeRoot
  3233.  
  3234.           This call deletes a fake root, that was created using MapFakeRoot.
  3235.  
  3236.           void DeleteFakeRoot(byte drive);
  3237.  
  3238.           Input:
  3239.              drive:   Drive number to remove   ( 0 = current, 1 = A ,
  3240.                                                  2 = B etc. )
  3241.  
  3242.     8.6.8 DeleteTrusteeFromDirectory
  3243.  
  3244.           This removes a trustee form a directorys trustee list.
  3245.  
  3246.           int DeleteTrusteeFromDirectory(byte directoryHandle,
  3247.                                          char *directoryPath,
  3248.                                          long trusteeObjectID);
  3249.  
  3250.           Input:
  3251.              directoryHandle: An optional directory handle, pointing to an
  3252.                               entry in the servers Directory Handle Table.
  3253.                               If "directoryPath" contains the full path name
  3254.                               then this must be 0x00.
  3255.              directoryPath:   256-byte null terminated directory path name.
  3256.                               This can either be a full path name, i.e.
  3257.                               VOLUME:DIR\..\DIR or a partial name containing
  3258.                               at least a directory name.
  3259.              trusteeObjectID: Bindery object ID of user name to remove
  3260.                               from the specified directories trustee list.
  3261.  
  3262.           Returns:            Result code (see Appendix I)
  3263.  
  3264.  
  3265.  
  3266.  
  3267.  
  3268.  
  3269.  
  3270.  
  3271.  
  3272.                                                                                 
  3273. Netware C Library      Chapter Eight - Directory Services              Page: 8-6
  3274. ────────────────────────────────────────────────────────────────────────────────
  3275.  
  3276.     8.6.9 GetCurrentDirectory
  3277.  
  3278.           This returns the current directory for the given drive.
  3279.  
  3280.           int GetCurrentDirectory(char driveNumber,char *directoryPath);
  3281.  
  3282.           Input:
  3283.              driveNumber:    Drive number whose current directory is to be
  3284.                              returned. (0 to 25 = A-Z, 26 to 31 = [\]^_')
  3285.  
  3286.           Output:
  3287.              directoryPath:  256-byte null terminated current path of
  3288.                              specified drive.
  3289.  
  3290.           Returns:           Result code (see Appendix I)
  3291.  
  3292.     8.6.10 GetDirectoryHandle
  3293.  
  3294.           Returns the directory handle of the given drive.
  3295.  
  3296.           int GetDirectoryHandle(char driveNumber,byte *statusFlags);
  3297.  
  3298.           Input:
  3299.              driveNumber:    Drive number whose handle is to be returned.
  3300.                              (0 to 25 = A-Z, 26 to 31 = [\]^_' )
  3301.  
  3302.           Output:
  3303.              statusFlags:    This is 1-byte with the following bits defined:-
  3304.                                 (MSB)   Bit 7:    Mapped to a local drive
  3305.                                             6-2:  Unused
  3306.                                             1:    Temporary directory handle
  3307.                                 (LSB)       0:    Permanent directory handle
  3308.  
  3309.           Returns:           Directory Handle (1 to 255), or zero if drive
  3310.                              number is invalid.
  3311.  
  3312.     8.6.11 GetDirectoryPath
  3313.  
  3314.           Returns the directory path of the specified handle.
  3315.  
  3316.           int GetDirectoryPath(byte directoryHandle,char *directoryPath);
  3317.  
  3318.           Input:
  3319.              directoryHandle: Directory handle whose path is to be returned.
  3320.  
  3321.           Output:
  3322.              directoryPath:   256-byte null terminated full path name.
  3323.  
  3324.           Returns:            Result code (see Appendix I)
  3325.  
  3326.  
  3327.  
  3328.  
  3329.  
  3330.  
  3331.  
  3332.                                                                                 
  3333. Netware C Library      Chapter Eight - Directory Services              Page: 8-7
  3334. ────────────────────────────────────────────────────────────────────────────────
  3335.  
  3336.     8.6.12 GetEffectiveDirectoryRights
  3337.  
  3338.           Returns the current users effective rights to the directory.
  3339.  
  3340.           int GetEffectiveDirectoryRights(byte directoryHandle,
  3341.                                           char *directoryPath,
  3342.                                           byte *effectiveRights);
  3343.  
  3344.           Input:
  3345.              directoryHandle: An optional directory handle, pointing to an
  3346.                               entry in the servers Directory Handle Table.
  3347.                               If "directoryPath" contains the full path name
  3348.                               then this must be 0x00.
  3349.              directoryPath:   256-byte null terminated directory path name.
  3350.                               This can either be a full path name, i.e.
  3351.                               VOLUME:DIR\..\DIR or a partial name containing
  3352.                               at least a directory name.
  3353.  
  3354.           Output:
  3355.              effectiveRights: Users effective rights in this directory.
  3356.  
  3357.           Returns:            Result code (see Appendix I)
  3358.  
  3359.     8.6.13 GetVolumeInformation
  3360.  
  3361.           This  returns information about the specified volume.  The structure
  3362.           VolumeStatistics is defined in the header file "Direct.h"
  3363.  
  3364.           int GetVolumeInformation(byte volumeNumber,
  3365.                                    VOLUME_STATISTICS *replyBuffer);
  3366.  
  3367.           Input:
  3368.              volumeNumber:   This identifies the volume in the file servers
  3369.                              Volume Table.
  3370.  
  3371.           Output:
  3372.              replyBuffer:    Structure containing the volume statistics.
  3373.                              It is declared in the header file "Direct.h".
  3374.                              See Appendix III.
  3375.  
  3376.           Returns:           Result code (see Appendix I)
  3377.  
  3378.  
  3379.  
  3380.  
  3381.  
  3382.  
  3383.  
  3384.  
  3385.  
  3386.  
  3387.  
  3388.  
  3389.  
  3390.  
  3391.  
  3392.                                                                                 
  3393. Netware C Library      Chapter Eight - Directory Services              Page: 8-8
  3394. ────────────────────────────────────────────────────────────────────────────────
  3395.  
  3396.     8.6.14 GetVolumeInfoWithHandle
  3397.  
  3398.           This returns information about a volume using a directory handle.
  3399.  
  3400.           int GetVolumeInfoWithHandle(byte directoryHandle,
  3401.                                       char *volumeName,
  3402.                                       word *sectorsPerBlock,
  3403.                                       word *totalBlocks,
  3404.                                       word *availableBlocks,
  3405.                                       word *totalDirectorySlots,
  3406.                                       word *availableDirectorySlots,
  3407.                                       int *volumeIsRemovable);
  3408.  
  3409.           Input:
  3410.              directoryHandle:         Directory handle pointing to an entry
  3411.                                       in the servers Directory Handle Table.
  3412.  
  3413.           Output:
  3414.              volumeName:              17-byte null terminated volume name
  3415.              sectorsPerBlock:         This is the number of 512-byte
  3416.                                       sectors contained in each block of
  3417.                                       the specified volume.
  3418.              totalBlocks:             This is the total number of blocks
  3419.                                       on the specified volume.
  3420.              availableBlocks:         This is the total number of unused
  3421.                                       blocks on the specified volume.
  3422.              totalDirectorySlots:     This is the number of directory slots
  3423.                                       that the installer allocated.
  3424.              availableDirectorySlots: This is the total number of unused
  3425.                                       directory slots.
  3426.              volumeIsRemovable:       A value of zero indicates that the
  3427.                                       volume cannot be removed.
  3428.  
  3429.           Returns:                    Result code (see Appendix I)
  3430.  
  3431.     8.6.15 GetVolumeInfoWithNumber
  3432.  
  3433.           This returns information about a volume using a volume number.
  3434.  
  3435.           int GetVolumeInfoWithNumber(byte volumeNumber,
  3436.                                       char *volumeName,
  3437.                                       word *sectorsPerBlock,
  3438.                                       word *totalBlocks,
  3439.                                       word *availableBlocks,
  3440.                                       word *totalDirectorySlots,
  3441.                                       word *availableDirectorySlots,
  3442.                                       int *volumeIsRemovable);
  3443.           Input:
  3444.              volumeNumber:            Number of the volume in the servers
  3445.                                       Volume Name Table.
  3446.  
  3447.           Output:
  3448.              volumeName:              17-byte null terminated volume name
  3449.              sectorsPerBlock:         This is the number of 512-byte
  3450.                                       sectors contained in each block of
  3451.                                       the specified volume.
  3452.                                                                                 
  3453. Netware C Library      Chapter Eight - Directory Services              Page: 8-9
  3454. ────────────────────────────────────────────────────────────────────────────────
  3455.  
  3456.              totalBlocks:             This is the total number of blocks
  3457.                                       on the specified volume.
  3458.              availableBlocks:         This is the total number of unused
  3459.                                       blocks on the specified volume.
  3460.              totalDirectorySlots:     This is the number of directory slots
  3461.                                       that the installer allocated.
  3462.              availableDirectorySlots: This is the total number of unused
  3463.                                       directory slots.
  3464.              volumeIsRemovable:       A value of zero indicates that the
  3465.                                       volume cannot be removed.
  3466.  
  3467.           Returns:                    Result code (see Appendix I)
  3468.  
  3469.     8.6.16 GetVolumeName
  3470.  
  3471.           This call returns the volume name of the specified volume.
  3472.  
  3473.           int GetVolumeName(int volumeNumber,char *volumeName);
  3474.  
  3475.           Input:
  3476.              volumeNumber:   This identifies the volume in the servers volume
  3477.                              table, it is an integer in the range 0-31.
  3478.  
  3479.           Output:
  3480.              volumeName:     17-byte null terminated name of the volume.
  3481.  
  3482.           Returns:           Result code (see Appendix I)
  3483.  
  3484.     8.6.17 GetVolumeNumber
  3485.  
  3486.           This call returns the volume number of the specified volume.
  3487.  
  3488.           int GetVolumeNumber(char *volumeName,int *volumeNumber);
  3489.  
  3490.           Input:
  3491.              volumeName:     17-byte null terminated Volume name.
  3492.  
  3493.           Output:
  3494.              volumeNumber:   Returned internal number of the specified volume.
  3495.  
  3496.           Returns:           Result code (see Appendix I)
  3497.  
  3498.     8.6.18 MapFakeRoot
  3499.  
  3500.           This call allows you to map any  drive as a fake root.  If the drive
  3501.           is not currently mapped then this will create the  mapping  and  set
  3502.           the  fake  root.
  3503.  
  3504.           int MapFakeRoot(byte drive,char *path);
  3505.  
  3506.           Input:
  3507.              drive:   Drive number to map ( 0 = current, 1 = A ,
  3508.                                             2 = B etc. )
  3509.              path:    The full path for the fake root.
  3510.  
  3511.           Returns:    Result code (see Appendix I)
  3512.                                                                                 
  3513. Netware C Library      Chapter Eight - Directory Services             Page: 8-10
  3514. ────────────────────────────────────────────────────────────────────────────────
  3515.  
  3516.     8.6.19 ModifyMaximumRightsMask
  3517.  
  3518.           Modify the maximum rights mask of a specific directory.
  3519.  
  3520.           int ModifyMaximumRightsMask(byte directoryHandle,
  3521.               char *directoryPath,byte revokeRightsMask,byte grantRightsMask);
  3522.  
  3523.           Input:
  3524.              directoryHandle:  An optional directory handle, pointing to an
  3525.                                entry in the servers Directory Handle Table.
  3526.                                If "directoryPath" contains the full path name
  3527.                                then this must be 0x00.
  3528.              directoryPath:    256-byte null terminated directory path name.
  3529.                                This can either be a full path name, i.e.
  3530.                                VOLUME:DIR\..\DIR or a partial name containing
  3531.                                at least a directory name.
  3532.              revokeRightsMask: The rights to be removed.
  3533.              grantRightsMask:  The rights to be added
  3534.  
  3535.           Returns:             Result code (see Appendix I)
  3536.  
  3537.     8.6.20 RenameDirectory
  3538.  
  3539.           Renames the specified server directory.
  3540.  
  3541.           int RenameDirectory(byte directoryHandle,char *directoryPath,
  3542.                               char *newDirectoryName);
  3543.  
  3544.           Input:
  3545.              directoryHandle:  An optional directory handle, pointing to an
  3546.                                entry in the servers Directory Handle Table.
  3547.                                If "directoryPath" contains the full path name
  3548.                                then this must be 0x00.
  3549.              directoryPath:    256-byte null terminated directory path name.
  3550.                                This can either be a full path name, i.e.
  3551.                                VOLUME:DIR\..\DIR or a partial name containing
  3552.                                at least a directory name.
  3553.              newDirectoryName: 15-byte null terminated new directory name.
  3554.  
  3555.           Returns:             Result code (see Appendix I)
  3556.  
  3557.     8.6.21 RestoreDirectoryHandle
  3558.  
  3559.           Restores a previously saved directory handle
  3560.  
  3561.           int RestoreDirectoryHandle(char *saveBuffer,
  3562.                          byte *newDirectoryHandle,byte *effectiveRightsMask);
  3563.  
  3564.           Input:
  3565.              saveBuffer:          16-byte save buffer.
  3566.  
  3567.           Output:
  3568.              newDirectoryHandle:  The directory handle that has been restored.
  3569.              effectiveRightsMask: The users current effective rights here.
  3570.  
  3571.           Returns:                Result code (see Appendix I)
  3572.                                                                                 
  3573. Netware C Library      Chapter Eight - Directory Services             Page: 8-11
  3574. ────────────────────────────────────────────────────────────────────────────────
  3575.  
  3576.     8.6.22 SaveDirectoryHandle
  3577.  
  3578.           Saves a specific directory handle.
  3579.  
  3580.           int SaveDirectoryHandle(byte directoryHandle,char *saveBuffer);
  3581.  
  3582.           Input:
  3583.              directoryHandle:    Directory handle to be saved.
  3584.  
  3585.           Output:
  3586.              saveBuffer:         16-byte buffer which contains the saved
  3587.                                  information.
  3588.  
  3589.           Returns:               Result code (see Appendix I)
  3590.  
  3591.     8.6.23 ScanBinderyObjectTrusteePaths
  3592.  
  3593.           This  returns  the directory paths to which the specified object has
  3594.           trustee rights.  This call  must  be  made  repeatedly to obtain all
  3595.           paths.
  3596.  
  3597.           int ScanBinderyObjectTrusteePaths(long objectID,byte volumeNumber,
  3598.                                 int *sequenceNumber,char *trusteeAccessMask,
  3599.                                 char *trusteePathName);
  3600.  
  3601.           Input:
  3602.              objectID:           Bindery object ID to scan for.
  3603.              volumeNumber:       Server volume number to scan (0-31)
  3604.              sequenceNumber:     On the first call this must contain zero.
  3605.                                  Do not alter for subsequent calls.
  3606.  
  3607.           Output:
  3608.              sequenceNumber:     Returns the sequence number of the next path.
  3609.              trusteeAccessMask:  The rights the object has in this directory.
  3610.              trusteePathName:    256-byte null terminated path name.
  3611.  
  3612.           Returns:               Result code (see Appendix I)
  3613.  
  3614.     8.6.24 ScanDirectoryForTrustees
  3615.  
  3616.           This returns the  trustees  of  the  specified directory.  This call
  3617.           must be made repeatedly in order to obtain all the trustees  of  the
  3618.           specified directory.
  3619.  
  3620.           int ScanDirectoryForTrustees(
  3621.                            byte directoryHandle,char *directoryPath,
  3622.                            int *sequenceNumber,char *directoryName,
  3623.                            char *creationDateTime,long *ownerID,
  3624.                            long *trusteeID,byte *trusteeRightsMask);
  3625.  
  3626.           Input:
  3627.              directoryHandle:  An optional directory handle, pointing to an
  3628.                                entry in the servers Directory Handle Table.
  3629.                                If "directoryPath" contains the full path name
  3630.                                then this must be 0x00.
  3631.  
  3632.                                                                                 
  3633. Netware C Library      Chapter Eight - Directory Services             Page: 8-12
  3634. ────────────────────────────────────────────────────────────────────────────────
  3635.  
  3636.              directoryPath:    256-byte null terminated directory path name.
  3637.                                This can either be a full path name, i.e.
  3638.                                VOLUME:DIR\..\DIR or a partial name containing
  3639.                                at least a directory name.
  3640.              sequenceNumber:   On the first call this must contain zero.
  3641.                                Do not alter for subsequent calls.
  3642.  
  3643.           Output:
  3644.              sequenceNumber:   Returns the sequence number of the next trustee
  3645.              directoryName:    16-byte name of the directory.
  3646.              creationDateTime: Date and time the directory was created:
  3647.  
  3648.                                     Byte
  3649.                                      0   Year   (0 to 99, where 80=1980,
  3650.                                                  1=1981 etc. Howver a
  3651.                                                  value less than 80 is
  3652.                                                  considered to be in the
  3653.                                                  21st century.)
  3654.                                      1   Month  (1 to 12)
  3655.                                      2   Day    (1 to 31)
  3656.                                      3   Hour   (0 to 23)
  3657.                                      4   Minute (0 to 59)
  3658.                                      5   Second (0 to 59)
  3659.  
  3660.              ownerID:          The bindery object ID of the user that created
  3661.                                this directory.
  3662.              trusteeID:        The bindery object ID of a trustee of the
  3663.                                directory.
  3664.              trusteeRightsMask:The trustees effective rights in this
  3665.                                directory.
  3666.  
  3667.           Returns:               Result code (see Appendix I)
  3668.  
  3669.     8.6.25 ScanDirectoryInformation
  3670.  
  3671.           This returns information about the first or next subdirectory of the
  3672.           specified directory.
  3673.  
  3674.           int ScanDirectoryInformation(
  3675.                        byte searchDirectoryHandle,char *searchDirectoryPath,
  3676.                        int *subdirNumber,char *directoryName,
  3677.                        byte *creationDateTime,long *ownerObjectID,
  3678.                        byte *maximumRightsMask);
  3679.  
  3680.           Input:
  3681.              searchDirectoryHandle:  An optional directory handle, pointing to
  3682.                                      an entry in  the servers Directory Handle
  3683.                                      Table.  If "searchDirectoryPath" contains
  3684.                                      the full path  name  then  this  must  be
  3685.                                      0x00.
  3686.              searchDirectoryPath:    256-byte null terminated directory path
  3687.                                      name. This can either be a full path name
  3688.                                      i.e. VOLUME:DIR\..\DIR or a partial name
  3689.                                      containing at least a directory name. The
  3690.                                      path can contain wildcard characters.
  3691.  
  3692.                                                                                 
  3693. Netware C Library      Chapter Eight - Directory Services             Page: 8-13
  3694. ────────────────────────────────────────────────────────────────────────────────
  3695.  
  3696.              subdirNumber:           On the first call this must contain zero.
  3697.                                      Do not alter for subsequent calls.
  3698.  
  3699.           Output:
  3700.              subdirNumber:           Returns the directory number of the next
  3701.                                      sub directory.
  3702.              directoryName:          16-byte name of the directory.
  3703.              creationDateTime:       Date and time the directory was created:
  3704.  
  3705.                                          Byte
  3706.                                           0   Year   (0 to 99, where 80=1980,
  3707.                                                       1=1981 etc. Howver a
  3708.                                                       value less than 80 is
  3709.                                                       considered to be in the
  3710.                                                       21st century.)
  3711.                                           1   Month  (1 to 12)
  3712.                                           2   Day    (1 to 31)
  3713.                                           3   Hour   (0 to 23)
  3714.                                           4   Minute (0 to 59)
  3715.                                           5   Second (0 to 59)
  3716.  
  3717.              ownerObjectID:          The bindery object ID of the user that
  3718.                                      created this directory.
  3719.              maximumRightsMask:      This is the maximum rights that any user
  3720.                                      will have in this subdirectory. See
  3721.                                      section 8.5 for possible settings.
  3722.  
  3723.           Returns:                   Result code (see Appendix I)
  3724.  
  3725.     8.6.26 SetDirectoryHandle
  3726.  
  3727.           Assigns a directory handle to a given path.
  3728.  
  3729.           int SetDirectoryHandle(byte sourceDirectoryHandle,
  3730.                                  char *sourceDirectoryPath,
  3731.                                  byte targetDirectoryHandle);
  3732.  
  3733.           Input:
  3734.              sourceDirectoryHandle:  An optional directory handle, pointing to
  3735.                                      an entry in the servers Directory Handle
  3736.                                      Table. If "sourceDirectoryPath" contains
  3737.                                      the full path name then this must be 0x00
  3738.              sourceDirectoryPath:    256-byte null terminated directory path
  3739.                                      name. This can either be a full path name
  3740.                                      i.e. VOLUME:DIR\..\DIR in which case
  3741.                                      source directory handle must be 0x00, or
  3742.                                      a partial directory name which will be
  3743.                                      used in conjunction with the source
  3744.                                      directory handle.
  3745.              targetDirectoryHandle:  The directory handle which is to point
  3746.                                      to the above specified directory. If the
  3747.                                      call fails, then this will point to its
  3748.                                      original directory.
  3749.  
  3750.           Returns:                   Result code (see Appendix I)
  3751.  
  3752.                                                                                 
  3753. Netware C Library        Chapter Nine - Print Services                 Page: 9-1
  3754. ────────────────────────────────────────────────────────────────────────────────
  3755.  
  3756.                               9. Print Services
  3757.  
  3758.     These services allow data that is sent to a LPT device, to be captured and
  3759.     redirected to a specific file server.
  3760.  
  3761. 9.1 Print Functions
  3762.  
  3763.     9.1.1 CancelLPTCapture
  3764.  
  3765.           This cancels the capture of the default LPT device.  The print queue
  3766.           job entry is removed and the capture  file is deleted unless it is a
  3767.           permanent file.  The LPT device is then returned to  local  printing
  3768.           mode.
  3769.  
  3770.           int CancelLPTCapture(void);
  3771.  
  3772.           Returns:    Result code (see Appendix I)
  3773.  
  3774.     9.1.2 CancelSpecificLPTCapture
  3775.  
  3776.           This  cancels the capture of a specific LPT device.  The print queue
  3777.           job entry is removed and the capture  file is deleted unless it is a
  3778.           permanent file.  The LPT device is then returned to  local  printing
  3779.           mode.
  3780.  
  3781.           int CancelSpecificLPTCapture(int prnNo);
  3782.  
  3783.           Input:
  3784.              prnNo:  LPT device number (0-2,0=LPT1)
  3785.  
  3786.           Returns:   Result code (see Appendix I)
  3787.  
  3788.     9.1.3 EndLPTCapture
  3789.  
  3790.           This  call  ends the capture of the default LPT device.  The capture
  3791.           file will be closed and the queue job entry will be released so that
  3792.           a print service may process it.   The LPT device is then returned to
  3793.           local printing mode.
  3794.  
  3795.           int EndLPTCapture(void);
  3796.  
  3797.           Returns:    Result code (see Appendix I)
  3798.  
  3799.     9.1.4 EndSpecificLPTCapture
  3800.  
  3801.           This call ends the capture of a specific LPT  device.   The  capture
  3802.           file will be closed and the queue job entry will be released so that
  3803.           a  print service may process it.  The LPT device is then returned to
  3804.           local printing mode.
  3805.  
  3806.           int EndSpecificLPTCapture(int prnNo);
  3807.  
  3808.           Input:
  3809.              prnNo:  LPT device number (0-2,0=LPT1)
  3810.  
  3811.           Returns:   Result code (see Appendix I)
  3812.                                                                                 
  3813. Netware C Library        Chapter Nine - Print Services                 Page: 9-2
  3814. ────────────────────────────────────────────────────────────────────────────────
  3815.  
  3816.  
  3817.     9.1.5 FlushLPTCapture
  3818.  
  3819.           This closes the  current  capture  file  of  the default LPT device.
  3820.           After this call is  made,  the  default  LPT  device  remains  in  a
  3821.           captured state.
  3822.  
  3823.           int FlushLPTCapture(void);
  3824.  
  3825.           Returns:    Result code (see Appendix I)
  3826.  
  3827.     9.1.6 FlushSpecificLPTCapture
  3828.  
  3829.           This  closes  the  current  capture  file  of a specific LPT device.
  3830.           After this call is  made,  the  specificied  LPT device remains in a
  3831.           captured state.
  3832.  
  3833.           int FlushSpecificLPTCapture(int prnNo);
  3834.  
  3835.           Input:
  3836.              prnNo:  LPT device number (0-2, 0=LPT1)
  3837.  
  3838.           Returns:   Result code (see Appendix I)
  3839.  
  3840.     9.1.7 GetBannerUserName
  3841.  
  3842.           Returns the user name that is printed on the banner page.
  3843.  
  3844.           int GetBannerUserName(char *pointer);
  3845.  
  3846.           Output:
  3847.              pointer:    13-byte null terminated user name
  3848.  
  3849.           Returns:       Result code (see Appendix I)
  3850.  
  3851.     9.1.8 GetLPTCaptureStatus
  3852.  
  3853.           This returns whether the default capture is active.
  3854.  
  3855.           int GetLPTCaptureStatus(void);
  3856.  
  3857.           Returns:    Capture Status.
  3858.                         0x00    Capture is not active
  3859.                         0xff    Capture is active
  3860.  
  3861.     9.1.9 GetDefaultLocalPrinter
  3862.  
  3863.           This returns the number of the default LPT device.
  3864.  
  3865.           int GetDefaultLocalPrinter(void);
  3866.  
  3867.           Returns:    Default LPT device number.
  3868.                         0x00    LPT1
  3869.                         0x01    LPT2
  3870.                         0x02    LPT3
  3871.  
  3872.                                                                                 
  3873. Netware C Library        Chapter Nine - Print Services                 Page: 9-3
  3874. ────────────────────────────────────────────────────────────────────────────────
  3875.  
  3876.     9.1.10 GetDefaultCaptureFlags
  3877.  
  3878.           Returns the print job flags for the default LPT device.
  3879.  
  3880.           int GetDefaultCaptureFlags(PRINT_CONTROL_DATA *reply);
  3881.  
  3882.           Output:
  3883.              reply:  Structure containing flags.
  3884.                      See Appendix III.
  3885.  
  3886.           Returns:   Result code (see Appendix I)
  3887.  
  3888.     9.1.11 GetPrinterStatus
  3889.  
  3890.           This returns the current status of the specified server printer.
  3891.  
  3892.           int GetPrinterStatus(int prnNo,
  3893.                                byte *printerHalted,byte *printerOffline,
  3894.                                byte *formType,byte *targetPrinterNumber);
  3895.  
  3896.           Input:
  3897.              prnNo:               Server printer number (0-4).
  3898.  
  3899.           Output:
  3900.              printerHalted:       A value of 0x00 indicates that the printer
  3901.                                   is active, and a value of 0xff if the
  3902.                                   printer is stopped.
  3903.              printerOffline:      A value of 0x01 indicates the printer is
  3904.                                   offline.
  3905.              formType:            This is the form type that is currently
  3906.                                   in use.
  3907.              targetPrinterNumber: This should be the same as the printer
  3908.                                   number specified in prnNo, unless the
  3909.                                   server console has rerouted the printer.
  3910.  
  3911.           Returns:                Result code (see Appendix I)
  3912.  
  3913.     9.1.12 GetSpecificCaptureFlags
  3914.  
  3915.           Returns the print job flags for the specified LPT device.
  3916.  
  3917.           int GetSpecificCaptureFlags(int device,PRINT_CONTROL_DATA *reply);
  3918.  
  3919.           Input:
  3920.              device: LPT device number (0-2, 0=LPT1)
  3921.  
  3922.           Output:
  3923.              reply:  Structure containing flags.
  3924.                      See Appendix III.
  3925.  
  3926.           Returns:   Result code (see Appendix I)
  3927.  
  3928.  
  3929.  
  3930.  
  3931.  
  3932.                                                                                 
  3933. Netware C Library        Chapter Nine - Print Services                 Page: 9-4
  3934. ────────────────────────────────────────────────────────────────────────────────
  3935.  
  3936.     9.1.13 SetBannerUserName
  3937.  
  3938.           Sets the user name that is printed on the banner page.  This applies
  3939.           to local LPT devices.
  3940.  
  3941.           int SetBannerUserName(char *pointer);
  3942.  
  3943.           Input:
  3944.              pointer:    13-byte null terminated user name.
  3945.  
  3946.           Returns:       Result code (see Appendix I)
  3947.  
  3948.     9.1.14 SetCapturePrintQueue
  3949.  
  3950.           Sets the target print queue  for  the  next capture of the specified
  3951.           device.
  3952.  
  3953.           int SetCapturePrintQueue(int device,long queueID);
  3954.  
  3955.           Input:
  3956.              device:     LPT device number (0-2, 0=LPT1)
  3957.              queueID:    This is the bindery object ID of the queue where
  3958.                          print jobs are to be sent.
  3959.  
  3960.           Returns:       Result code (see Appendix I)
  3961.  
  3962.     9.1.15 SetDefaultLocalPrinter
  3963.  
  3964.           This sets  the  default  LPT  device,  for  all  default  local  LPT
  3965.           capturing.
  3966.  
  3967.           int SetDefaultLocalPrinter(int device);
  3968.  
  3969.           Input:
  3970.              device: LPT device number (0-2, 0=LPT1)
  3971.  
  3972.           Returns:   Result code (see Appendix I)
  3973.  
  3974.     9.1.16 SetDefaultCaptureFlags
  3975.  
  3976.           Sets the capture flags for the default LPT device.
  3977.  
  3978.           int SetDefaultCaptureFlags(PRINT_CONTROL_DATA *flags);
  3979.  
  3980.           Input:
  3981.              flags:  Structure containing flags.
  3982.                      See Appendix III.
  3983.  
  3984.           Returns:   Result code (see Appendix I)
  3985.  
  3986.  
  3987.  
  3988.  
  3989.  
  3990.  
  3991.  
  3992.                                                                                 
  3993. Netware C Library        Chapter Nine - Print Services                 Page: 9-5
  3994. ────────────────────────────────────────────────────────────────────────────────
  3995.  
  3996.     9.1.17 SetSpecificCaptureFlags
  3997.  
  3998.           Sets the capture flags for the specified LPT device.
  3999.  
  4000.           int SetSpecificCaptureFlags(int device,PRINT_CONTROL_DATA *reply);
  4001.  
  4002.           Input:
  4003.              device: LPT device number (0-2, 0=LPT1)
  4004.              flags:  Structure containing flags.
  4005.                      See Appendix III.
  4006.  
  4007.           Returns:   Result code (see Appendix I)
  4008.  
  4009.     9.1.18 SpecifyCaptureFile
  4010.  
  4011.           This creates a capture file for the next capture process.
  4012.  
  4013.           int SpecifyCaptureFile(int directoryHandle,char *filename);
  4014.  
  4015.           Input:
  4016.              directoryHandle:    An optional directory handle, pointing to an
  4017.                                  entry in the servers Directory Handle Table.
  4018.                                  If "filename" contains the full path name
  4019.                                  then this must be 0x00.
  4020.              filename:           256-byte null terminated file name. This can
  4021.                                  either be a full path name, i.e.
  4022.                                  VOLUME:DIR\..\DIR\FILE or a partial name
  4023.                                  containing at least the terminal name of the
  4024.                                  file.
  4025.  
  4026.           Returns:               Result code (see Appendix I)
  4027.  
  4028.     9.1.19 StartLPTCapture
  4029.  
  4030.           This starts the capture of the default LPT device.
  4031.  
  4032.           int StartLPTCapture(void);
  4033.  
  4034.           Returns:    Result code (see Appendix I)
  4035.  
  4036.     9.1.20 StartSpecificLPTCapture
  4037.  
  4038.           This starts the capture of the specified LPT device.
  4039.  
  4040.           int StartSpecificLPTCapture(int device);
  4041.  
  4042.           Input:
  4043.              device: LPT device number (0-2, 0=LPT1)
  4044.  
  4045.           Returns:   Result code (see Appendix I)
  4046.  
  4047.  
  4048.  
  4049.  
  4050.  
  4051.  
  4052.                                                                                 
  4053. Netware C Library    Chapter Ten - Synchronisation Services           Page: 10-1
  4054. ────────────────────────────────────────────────────────────────────────────────
  4055.  
  4056.                          10. Synchronisation Services
  4057.  
  4058.     These services allow applications  to  control  access  to files and other
  4059.     network resources.  These  are  split  into  two  categories:  file/record
  4060.     locking  and  semaphores.   This document and associated library currently
  4061.     only covers semaphores, file/record locking  functions will be provided in
  4062.     a future release.
  4063.  
  4064. 10.1 Semaphores
  4065.  
  4066.     A semaphore is a named location that has a value associated with it.   The
  4067.     name can be up to 127 bytes long and the value can be in the range -127 to
  4068.     127.   Semaphores  are  generally used to control access to resources on a
  4069.     network.
  4070.  
  4071.     Before an application can access  a  semaphore,  it  must first open it by
  4072.     calling OpenSemaphore, if the semaphore does not  already  exist  then  it
  4073.     will  be automatically created by this call.  OpenSemaphore must be passed
  4074.     an initial  value  for  the  semaphore  which  will  only  be  used if the
  4075.     semaphore is to be created, this value is the number of processes that can
  4076.     access the network resource at any one time and must be in the range 1  to
  4077.     127.   After  opening  the  specified semaphore, the associated open count
  4078.     will be incremented and the value returned to the caller.
  4079.  
  4080.     When the application wishes to access the  resource  associated  with  the
  4081.     semaphore,  it  must  first call WaitOnSemaphore.  When WaitOnSemaphore is
  4082.     called, the value associated with  the  semaphore is decremented.  If this
  4083.     value is still positive, i.e.  greater than or equal to zero, then a  zero
  4084.     response  is  returned indicating that the resource is available otherwise
  4085.     the application will be placed in a queue and a wait will be performed for
  4086.     the specified  period.   If  the  semaphore  value  should become positive
  4087.     during the wait, i.e.  another application has released it, then the  wait
  4088.     will be terminated and a zero response will be returned.  If the semaphore
  4089.     value  is  still  negative at the end of the wait, then the application is
  4090.     removed from the queue,  the  semaphore  value  will  be incremented and a
  4091.     failing response will be returned indicating  that  the  resource  is  not
  4092.     available.
  4093.  
  4094.     After an  application  has  finished  with  the  resource,  it  must  call
  4095.     SignalSemaphore in order to increment the semaphore value.
  4096.  
  4097.     Before  the application terminates it must call CloseSemaphore in order to
  4098.     decrement the open count  associated  with  the  semaphore.  If this count
  4099.     should become zero then the semaphore will be automatically deleted.
  4100.  
  4101.     The current value and open count of a semaphore can be obtained by calling
  4102.     ExamineSemaphore.   The  semaphore  does  not  need  to  be  opened by the
  4103.     application in order to call this.
  4104.  
  4105.  
  4106.  
  4107.  
  4108.  
  4109.  
  4110.  
  4111.  
  4112.                                                                                 
  4113. Netware C Library    Chapter Ten - Synchronisation Services           Page: 10-2
  4114. ────────────────────────────────────────────────────────────────────────────────
  4115.  
  4116. 10.2 Synchronisation Functions
  4117.  
  4118.     10.2.1 CloseSemaphore
  4119.  
  4120.           This decrements the  semaphore's  open  count,  if the count becomes
  4121.           zero then the semaphore will be deleted.
  4122.  
  4123.           int CloseSemaphore( long semaphoreHandle );
  4124.  
  4125.           Input:
  4126.              semaphoreHandle:  Handle returned from the call to OpenSemaphore.
  4127.  
  4128.           Returns:             Result code (see Appendix I)
  4129.  
  4130.     10.2.2 ExamineSemaphore
  4131.  
  4132.           Returns the current open count and value of the specified semaphore.
  4133.  
  4134.           int ExamineSemaphore( long semaphoreHandle,
  4135.                                 int *semaphoreValue,word *openCount);
  4136.  
  4137.           Input:
  4138.              semaphoreHandle:  Handle returned from the call to OpenSemaphore.
  4139.  
  4140.           Output:
  4141.              semaphoreValue:   Current semaphore value, in the range -127 to
  4142.                                127.  A positive value indicates that
  4143.                                applications can access the resource associated
  4144.                                with this semaphore, a negative value indicates
  4145.                                that there is currently a queue of processes
  4146.                                waiting for the semaphore to become free.
  4147.              openCount:        The current number of processes that have this
  4148.                                semaphore open.
  4149.  
  4150.           Returns:             Result code (see Appendix I)
  4151.  
  4152.     10.2.3 OpenSemaphore
  4153.  
  4154.           This opens/creates the specified semaphore.
  4155.  
  4156.           int OpenSemaphore( char *semaphoreName,int initialValue,
  4157.                              long *semaphoreHandle,word *openCount);
  4158.  
  4159.           Input:
  4160.              semaphoreName:    Name of the semaphore to be opened.
  4161.              initialValue:     The value to be given to the semaphore if it is
  4162.                                created. i.e. the number of applications that
  4163.                                can simultaneously access the resource that is
  4164.                                associated with the named semaphore.
  4165.  
  4166.           Output:
  4167.              semaphoreHandle:  A handle to the semaphore.
  4168.              openCount:        The current number of processes that have this
  4169.                                semaphore open.
  4170.  
  4171.           Returns:             Result code (see Appendix I)
  4172.                                                                                 
  4173. Netware C Library    Chapter Ten - Synchronisation Services           Page: 10-3
  4174. ────────────────────────────────────────────────────────────────────────────────
  4175.  
  4176.     10.2.4 SignalSemaphore
  4177.  
  4178.           This increments the value of the specified semaphore.
  4179.  
  4180.           int SignalSemaphore( long semaphoreHandle );
  4181.  
  4182.           Input:
  4183.              semaphoreHandle:  Handle returned from the call to OpenSemaphore.
  4184.  
  4185.           Returns:             Result code (see Appendix I)
  4186.  
  4187.     10.2.5 WaitOnSemaphore
  4188.  
  4189.           This decrements the semaphore value.   If the value becomes negative
  4190.           then the call will wait for the specified length of time.
  4191.  
  4192.           int WaitOnSemaphore( long semaphoreHandle , int timeoutLimit );
  4193.  
  4194.           Input:
  4195.              semaphoreHandle:  Handle returned from the call to OpenSemaphore.
  4196.              timeoutLimit:     The length of time the process must wait if
  4197.                                the semaphore is not available. This is in
  4198.                                units of 1/18th of a second, 0 equals no wait.
  4199.  
  4200.           Returns:             Result code (see Appendix I)
  4201.  
  4202.  
  4203.  
  4204.  
  4205.  
  4206.  
  4207.  
  4208.  
  4209.  
  4210.  
  4211.  
  4212.  
  4213.  
  4214.  
  4215.  
  4216.  
  4217.  
  4218.  
  4219.  
  4220.  
  4221.  
  4222.  
  4223.  
  4224.  
  4225.  
  4226.  
  4227.  
  4228.  
  4229.  
  4230.  
  4231.  
  4232.                                                                                 
  4233. Netware C Library   Chapter Eleven - Communication Services           Page: 11-1
  4234. ────────────────────────────────────────────────────────────────────────────────
  4235.  
  4236.                          11. Communication Services
  4237.  
  4238.     These services allow applications  to  use the Netware Internetwork Packet
  4239.     Exchange (IPX) and the Netware Sequenced Packet Exchange (SPX)  protocols.
  4240.     These  protocols  are  based  on  the Xerox Network Systems (XNS) Internet
  4241.     Transport Protocols.
  4242.  
  4243.     Both IPX and SPX  allow  peer-to-peer  communication.  This means that all
  4244.     communication is done directly between two or  more  workstations  on  the
  4245.     internet, bypassing the file server.
  4246.  
  4247.     Because  nodes  on  an  internet  can  communicate  in  various  ways, the
  4248.     International  Standards  Organisation  (ISO)  proposed  a  standard model
  4249.     called the Open  Systems  Interconnection  (OSI)  model.   The  OSI  model
  4250.     basically  consists  of  seven  layers,  which  are:  Physical, Data Link,
  4251.     Network, Transport,  Session,  Presentation  and  Application.  Each layer
  4252.     provides services to the next higher layer.  The IPX  protocol  maps  onto
  4253.     layer  three  (Network),  which  is  concerned  with packet addressing and
  4254.     routing, and the SPX protocol  maps  onto layer four (Transport), which is
  4255.     concerned with the guaranteed and sequenced  delivery  of  packets.
  4256.  
  4257. 11.1 IPX Protocol
  4258.  
  4259.     IPX is known as a connectionless or datagram  protocol,  this  means  that
  4260.     when  IPX  is  used  to  communicate  between two nodes on the network, no
  4261.     connection is established.  Therefore there is no guarantee that data sent
  4262.     from one node will be received by the destination node.
  4263.  
  4264.     There  are  two  structures that are needed in order to use IPX, these are
  4265.     the IPX packet and the  Event  Control  Block (ECB).  For every IPX packet
  4266.     there is an associated ECB.
  4267.  
  4268. 11.1.1 IPX Packet Structure
  4269.  
  4270.     An IPX packet consists of  a  30-byte  header  plus  any  number  of  data
  4271.     fragments  as  long  as the total length of the packet does not exceed 576
  4272.     bytes.  IPX  does  not  use  the  data  fragments,  and  so  these  can be
  4273.     application defined, but the header, as defined in the file "ipxspx.h", is
  4274.     as follows:
  4275.  
  4276.              typedef struct { byte          network_number[4];
  4277.                               byte          node_address[6];
  4278.                               nw_int        socket_number;
  4279.                             } NETWORK_ADDR;
  4280.  
  4281.              typedef struct { nw_int        checksum;
  4282.                               nw_int        length;
  4283.                               byte          transport_control;
  4284.                               byte          packet_type;
  4285.                               NETWORK_ADDR  dest_addr;
  4286.                               NETWORK_ADDR  srce_addr;
  4287.                             } IPX_HEADER;
  4288.  
  4289.     All the fields with the exception of "packet_type" and "dest_addr" are set
  4290.     automatically  by IPX.
  4291.  
  4292.                                                                                 
  4293. Netware C Library   Chapter Eleven - Communication Services           Page: 11-2
  4294. ────────────────────────────────────────────────────────────────────────────────
  4295.  
  4296.     For IPX "packet_type" should be set to either  0 or 4, but it can take the
  4297.     following values:
  4298.  
  4299.                        0      Unknown packet type
  4300.                        1      Routing information packet
  4301.                        2      Echo packet
  4302.                        3      Error packet
  4303.                        4      Packet exchange packet
  4304.                        5      Sequenced packet protocol packet
  4305.                        16     Experimental protocol
  4306.                        17     Netware core protocol
  4307.                        18-31  Experimental protocols
  4308.  
  4309.     The "dest_addr" field contains the network number and node address of  the
  4310.     destination  node,  along  with  the socket number that the destination is
  4311.     listening  on  for  this  communication,  see  the   definition   of   the
  4312.     function IPX_OPEN_SOCKET for more information about sockets.
  4313.  
  4314. 11.2 SPX Protocol
  4315.  
  4316.     SPX  is  known as a connection-oriented protocol, this means that before a
  4317.     packet can be sent a connection must be established between the source and
  4318.     destination nodes.  SPX automatically  performs  the tasks of guaranteeing
  4319.     delivery  of  packets,  sequencing  of  packets  and  the  detection   and
  4320.     correction of errors.
  4321.  
  4322.     Like IPX there are two  structures  that  are  needed in order to use SPX,
  4323.     these are the SPX packet and the Event Control Block (ECB).  For every SPX
  4324.     packet there is an associated ECB.
  4325.  
  4326. 11.2.1 SPX Packet Structure
  4327.  
  4328.     An SPX packet consists of  a  42-byte  header  plus  any  number  of  data
  4329.     fragments  as  long  as the total length of the packet does not exceed 576
  4330.     bytes.  SPX  does  not  use  the  data  fragments,  and  so  these  can be
  4331.     application defined, but the header, as defined in the file "ipxspx.h", is
  4332.     as follows:
  4333.  
  4334.              typedef struct { IPX_HEADER  ipx;
  4335.                               byte        connection_control;
  4336.                               byte        datastream_type;
  4337.                               nw_int      source_connection_id;
  4338.                               nw_int      dest_connection_id;
  4339.                               nw_int      sequence_number;
  4340.                               nw_int      acknowledge_number;
  4341.                               nw_int      allocation_number;
  4342.                             } SPX_HEADER;
  4343.  
  4344.     The first 30 bytes have the  same  meaning  as the IPX header, except that
  4345.     the packet type field must be set to 5  to  signify  that  it  is  an  SPX
  4346.     packet. The additional fields for SPX are defined as follows:
  4347.  
  4348.     connection_control:
  4349.  
  4350.          This  field  contains  four flags that are used by SPX to control the
  4351.          flow of data across the connection:
  4352.                                                                                 
  4353. Netware C Library   Chapter Eleven - Communication Services           Page: 11-3
  4354. ────────────────────────────────────────────────────────────────────────────────
  4355.  
  4356.  
  4357.               Bits    7 6 5 4 3 2 1 0
  4358.                       - - - x - - - -   End-of-Message
  4359.                       - - x - - - - -   Attention
  4360.                       - x - - - - - -   Acknowledgement-Required
  4361.                       x - - - - - - -   System-Packet
  4362.  
  4363.               End-of-Message:
  4364.  
  4365.                      This  flag  is  set  to signal an end of connection.  SPX
  4366.                      ignores this  bit  and  passes  it  on  unchanged  to the
  4367.                      destination.
  4368.  
  4369.               Attention:
  4370.  
  4371.                      This  flag  is  set if the packet is an attention packet.
  4372.                      SPX ignores this bit  and  passes  it on unchanged to the
  4373.                      destination.
  4374.  
  4375.               Acknowledgement-Required:
  4376.  
  4377.                      This bit is set by SPX if an  acknowledgement  packet  is
  4378.                      required.    SPX  handles  acknowledgement  requests  and
  4379.                      responses automatically.
  4380.  
  4381.               System-Packet:
  4382.  
  4383.                      SPX sets this  bit  if  the  packet  is  a system packet.
  4384.                      These packets are used internally by SPX.
  4385.  
  4386.     datastream_type:
  4387.  
  4388.          This indicates the type of data that can be found in the packet.   It
  4389.          can take the following values:
  4390.  
  4391.               0 to 253     User defined ( SPX ignores these values ).
  4392.               254          End-of-Connection. This packet type is generated by
  4393.                            SPX when an SPXTerminateConnection call is issued.
  4394.               255          End-of-Connection-Acknowledgement. This is sent by
  4395.                            SPX   whenever   a    workstation    receives    an
  4396.                            End-of-Connection packet.
  4397.  
  4398.     source_connection_id:
  4399.  
  4400.          SPX  sets  this  field  to  the  SPX  connection  id  of  the  source
  4401.          workstation.
  4402.  
  4403.     dest_connection_id:
  4404.  
  4405.          SPX  sets  this  field  to  the  SPX connection id of the destination
  4406.          workstation.
  4407.  
  4408.     sequence_number:
  4409.  
  4410.          SPX uses this field to identify and discard duplicate packets.  It is
  4411.          set and maintained by SPX.
  4412.                                                                                 
  4413. Netware C Library   Chapter Eleven - Communication Services           Page: 11-4
  4414. ────────────────────────────────────────────────────────────────────────────────
  4415.  
  4416.  
  4417.     acknowledge_number:
  4418.  
  4419.          SPX uses this field to indicate  the  sequence  number  of  the  next
  4420.          packet SPX expects to receive.
  4421.  
  4422.     allocation_number:
  4423.  
  4424.          This is used internally  by  SPX,  it  contains the number of packets
  4425.          sent but not yet acknowledged by the destination workstation.
  4426.  
  4427. 11.3 Event Control Block (ECB)
  4428.  
  4429.     This  is  a  structure  that  contains  details  about the IPX/SPX packet,
  4430.     particularly the number of fragments and the size and address of each one.
  4431.     For a send ECB,  IPX  will  collect  together  all  the fragments that are
  4432.     specified in the ECB into one buffer before transmitting the  packet,  and
  4433.     for  a  receive  ECB,  IPX  will  distribute  the received packet into the
  4434.     appropriate addresses specified by  the  ECB.   The  ECB also contains the
  4435.     completion code of the send or receive process.
  4436.  
  4437. 11.3.1 ECB Structure
  4438.  
  4439.     The  ECB structure declared in "ipxspx.h" contains only two fragments, the
  4440.     first is for the IPX/SPX header and the second is for the users data.  The
  4441.     structure definition is as follows:
  4442.  
  4443.              typedef struct { void _far  *address;
  4444.                               word       length;
  4445.                             } ECB_FRAGMENT;
  4446.  
  4447.              typedef struct { void _far     *link_address;
  4448.                               void          (_far *esr)(void);
  4449.                               byte          in_use;
  4450.                               byte          completion_code;
  4451.                               nw_int        socket_number;
  4452.                               byte          IPX_workspace[4];
  4453.                               byte          driver_workspace[12];
  4454.                               byte          immediate_address[6];
  4455.                               word          fragment_count;
  4456.                               ECB_FRAGMENT  fragment[2];
  4457.                             } EVENT_CONTROL_BLOCK;
  4458.  
  4459.     link_address:
  4460.  
  4461.          This is maintained by IPX whilst the ECB is in use.  When the ECB  is
  4462.          not in use then the application can use this field.
  4463.  
  4464.     esr:
  4465.  
  4466.          This  contains  the  address  of an application defined Event Service
  4467.          Routine (ESR) that  IPX  will  call  when  the  send or receive event
  4468.          finishes.  IPX also maintains the in_use and completion_code  fields,
  4469.          so  an application could simply poll these fields instead of using an
  4470.          ESR.  If no ESR is required then  this  field should be set to a null
  4471.          pointer.
  4472.                                                                                 
  4473. Netware C Library   Chapter Eleven - Communication Services           Page: 11-5
  4474. ────────────────────────────────────────────────────────────────────────────────
  4475.  
  4476.  
  4477.     in_use:
  4478.  
  4479.          Whilst the ECB is in use, this field will contain a  non-zero  value.
  4480.          Once  IPX  has  finished  with the ECB, i.e.  the send or receive has
  4481.          finished, then this value will be set to zero.
  4482.  
  4483.     completion_code:
  4484.  
  4485.          This field is set  by  IPX  to  indicate  the  result  of the send or
  4486.          receive event.  This field is undefined whilst  the  in_use  flag  is
  4487.          non-zero. The following completion codes can be reported:
  4488.  
  4489.              Send-ECB:   0x00  Successful - The request was sent
  4490.                          0xfc  Cancelled - The send request was cancelled
  4491.                          0xfd  Malformed - The packet was malformed
  4492.                          0xfe  Undelivered - The packet could not be delivered
  4493.                          0xff  Hardware Failure - There has been a physical
  4494.                                hardware or network failure.
  4495.  
  4496.              Listen-ECB: 0x00  Successful - A packet was received
  4497.                          0xfc  Cancelled - The listen request was cancelled
  4498.                          0xfd  Overflow - A packet was received, but the
  4499.                                fragment count in the ECB is zero, or the
  4500.                                available space specified in the ECB is not
  4501.                                large enough to hold the entire packet.
  4502.                          0xff  Closed - The listening socket is not open.
  4503.  
  4504.              Timer-ECB:  0x00  Successful
  4505.                          0xfc  Cancelled - The timer event was cancelled.
  4506.  
  4507.     socket_number:
  4508.  
  4509.          This  contains  the number of the previously opened socket that is to
  4510.          be  associated  with  this  ECB.  This is held in high-low format, so
  4511.          must be stored using the function NWintconvert, see section 1.7.
  4512.  
  4513.     IPX_workspace:
  4514.  
  4515.          This is reserved for use by IPX.
  4516.  
  4517.     driver_workspace:
  4518.  
  4519.          This is reserved for use by the network driver.
  4520.  
  4521.     immediate_address:
  4522.  
  4523.          This contains the address of the node to which the packet  is  to  be
  4524.          sent or from which it was received.   If the node is not on the local
  4525.          network then this will contain the address of an internetwork bridge.
  4526.  
  4527.     fragment_count:
  4528.  
  4529.          This contains the number of data fragments that are  associated  with
  4530.          this ECB.
  4531.  
  4532.                                                                                 
  4533. Netware C Library   Chapter Eleven - Communication Services           Page: 11-6
  4534. ────────────────────────────────────────────────────────────────────────────────
  4535.  
  4536.     fragment.address:
  4537.  
  4538.          This contains the address of this fragment.
  4539.  
  4540.     fragment.length:
  4541.  
  4542.          This contains the length of this fragment.
  4543.  
  4544.  
  4545.  
  4546.  
  4547.  
  4548.  
  4549.  
  4550.  
  4551.  
  4552.  
  4553.  
  4554.  
  4555.  
  4556.  
  4557.  
  4558.  
  4559.  
  4560.  
  4561.  
  4562.  
  4563.  
  4564.  
  4565.  
  4566.  
  4567.  
  4568.  
  4569.  
  4570.  
  4571.  
  4572.  
  4573.  
  4574.  
  4575.  
  4576.  
  4577.  
  4578.  
  4579.  
  4580.  
  4581.  
  4582.  
  4583.  
  4584.  
  4585.  
  4586.  
  4587.  
  4588.  
  4589.  
  4590.  
  4591.  
  4592.                                                                                 
  4593. Netware C Library   Chapter Eleven - Communication Services           Page: 11-7
  4594. ────────────────────────────────────────────────────────────────────────────────
  4595.  
  4596. 11.4 IPX Functions
  4597.  
  4598.     The following function calls use two structures that are declared  in  the
  4599.     header file "ipxspx.h". These are:
  4600.  
  4601.              typedef struct { byte   network_number[4];
  4602.                               byte   node_address[6];
  4603.                             } INTER_NETWORK_ADDR;
  4604.  
  4605.              typedef struct { INTER_NETWORK_ADDR ina;
  4606.                               nw_int             socket_number;
  4607.                             } NETWORK_ADDR;
  4608.  
  4609.     11.4.1 IPXCancelEvent
  4610.  
  4611.           This  cancels  an IPX/SPX event that is associated with a particular
  4612.           ECB.  A completion code will  be  returned in the cancelled ECB, but
  4613.           the ESR wil not be actioned.
  4614.  
  4615.           word IPXCancelEvent( EVENT_CONTROL_BLOCK *ecb );
  4616.  
  4617.           Input:
  4618.              ecb:    Address of the ECB that is to be cancelled.
  4619.  
  4620.           Returns:   Result code (see Appendix I)
  4621.  
  4622.     11.4.2 IPXCloseSocket
  4623.  
  4624.           This closes a socket that was previously  opened  by  IPXOpenSocket.
  4625.           Any events that are associated with the socket will be cancelled.
  4626.  
  4627.           void IPXCloseSocket( word socketNumber );
  4628.  
  4629.           Input:
  4630.              socketNumber:    Number of the socket to close.
  4631.  
  4632.     11.4.3 IPXDisconnectFromTarget
  4633.  
  4634.           An application uses this function to notify a listening node that no
  4635.           more IPX packets are going to be sent.
  4636.  
  4637.           void IPXDisconnectFromTarget( NETWORK_ADDR *networkAddress );
  4638.  
  4639.           Input:
  4640.              networkAddress:  Full network address of the node with which the
  4641.                               connection is being terminated.
  4642.  
  4643.  
  4644.  
  4645.  
  4646.  
  4647.  
  4648.  
  4649.  
  4650.  
  4651.  
  4652.                                                                                 
  4653. Netware C Library   Chapter Eleven - Communication Services           Page: 11-8
  4654. ────────────────────────────────────────────────────────────────────────────────
  4655.  
  4656.     11.4.4 IPXGetInternetworkAddress
  4657.  
  4658.           This returns the  network  number  and  node  address of the calling
  4659.           workstation.
  4660.  
  4661.           void IPXGetInternetworkAddress(INTER_NETWORK_ADDR *networkAddress);
  4662.  
  4663.           Output:
  4664.              networkAddress:  Network number and node address of the calling
  4665.                               workstation.
  4666.  
  4667.     11.4.5 IPXGetIntervalMarker
  4668.  
  4669.           This returns the number of clock ticks  that  have  occured  in  the
  4670.           requesting  workstation  since  IPX  was loaded.  Approximately 18.2
  4671.           clock ticks occur every second.
  4672.  
  4673.           word IPXGetIntervalMarker( void );
  4674.  
  4675.           Returns:    The number of clock ticks since IPX was loaded.
  4676.  
  4677.     11.4.6 IPXGetLocalTarget
  4678.  
  4679.           This   returns   the   information   that   is   required   for  the
  4680.           immediate_address field in an IPXSendPacket ECB.  The returned  node
  4681.           address  is  either the address of the nearest bridge, if the packet
  4682.           must cross a bridge, or the address of the destination workstation.
  4683.  
  4684.           word IPXGetLocalTarget( INTER_NETWORK_ADDR *networkAddress ,
  4685.                                   byte *immediateAddress,
  4686.                                   word *transportTime );
  4687.  
  4688.           Input:
  4689.              networkAddress:   The network number and node address of the
  4690.                                destination workstation.
  4691.  
  4692.           Output:
  4693.              immediateAddress: The routing address of the destination. This
  4694.                                must be placed in the immediate_address field
  4695.                                of a send ECB.
  4696.              transportTime:    This is the number of timer ticks that a packet
  4697.                                will take in order to get to the destination.
  4698.  
  4699.           Returns:             Result code (see Appendix I)
  4700.  
  4701.     11.4.7 IPXInitialise
  4702.  
  4703.           This initialises the areas  used  by  the IPX library functions.  It
  4704.           must be the first IPX function that is called.
  4705.  
  4706.           word IPXInitialise( void );
  4707.  
  4708.           Returns:    0     IPX is installed
  4709.                       -1    IPX is not installed
  4710.  
  4711.  
  4712.                                                                                 
  4713. Netware C Library   Chapter Eleven - Communication Services           Page: 11-9
  4714. ────────────────────────────────────────────────────────────────────────────────
  4715.  
  4716.     11.4.8 IPXListenForPacket
  4717.  
  4718.           One or more calls to this function must be made in order to give IPX
  4719.           the address of a buffer  in  which  the next incoming message packet
  4720.           must be placed.  Each call gives IPX an ECB that is then placed in a
  4721.           pool of listening ECBs.  An immediate return to the calling  program
  4722.           is made after each call.
  4723.  
  4724.           When  IPX  receives  a  packet  one of the listening ECBs that has a
  4725.           matching socket number  is  selected.   The  ECBs  are selected in a
  4726.           random order.
  4727.  
  4728.           word IPXListenForPacket( EVENT_CONTROL_BLOCK *ecb );
  4729.  
  4730.           Input:
  4731.              ecb:    Address of the listening ECB.
  4732.  
  4733.           Returns:   Result code (see Appendix I)
  4734.  
  4735.     11.4.9 IPXOpenSocket
  4736.  
  4737.           This function opens a socket that can then be used by either IPX  or
  4738.           SPX, but not by both simultaneously.
  4739.  
  4740.           word IPXOpenSocket( word *socketNumber, byte longevity );
  4741.  
  4742.           Input:
  4743.              socketNumber:  The number of the socket to open. A value of zero
  4744.                             will cause IPX to generate a socket number in the
  4745.                             range 0x4000 to 0x8000.
  4746.  
  4747.                             Socket numbers in the range 0x0000 to 0x0bb9 and
  4748.                             0x8001 to 0xffff are reserved and must not be
  4749.                             used.
  4750.  
  4751.              longevity:     This specifies whether the socket is short-lived
  4752.                             (0x00) or long-lived (0xff). A short-lived socket
  4753.                             is closed automatically when the application
  4754.                             terminates or when a call to IPXCloseSocket is
  4755.                             made, long-lived sockets must be closed explicitly
  4756.                             by calling IPXCloseSocket.
  4757.  
  4758.           Output:
  4759.              socketNumber:  Returns the actual socket number that was opened.
  4760.  
  4761.           Returns:          Result code (see Appendix I)
  4762.  
  4763.     11.4.10 IPXRelinquishControl
  4764.  
  4765.           This must be called at periodic  intervals in order to give IPX time
  4766.           to process events.
  4767.  
  4768.           void IPXRelinquishControl( void );
  4769.  
  4770.  
  4771.  
  4772.                                                                                 
  4773. Netware C Library   Chapter Eleven - Communication Services          Page: 11-10
  4774. ────────────────────────────────────────────────────────────────────────────────
  4775.  
  4776.     11.4.11 IPXScheduleIPXEvent
  4777.  
  4778.           This function passes an ECB to  IPX  for processing at a later time.
  4779.           IPX returns to the application immediately after this call and waits
  4780.           in the background until the delay period has expired.
  4781.  
  4782.           void IPXScheduleIPXEvent( EVENT_CONTROL_BLOCK *ecb ,
  4783.                                     word delayTicks );
  4784.  
  4785.           Input:
  4786.              ecb:         Address of the ECB to be processed.
  4787.              delayTicks:  Number of clock ticks that IPX must wait for before
  4788.                           processing the ECB.   Approximately 18.2 clock ticks
  4789.                           occur every second.
  4790.  
  4791.     11.4.12 IPXSendPacket
  4792.  
  4793.           This function instructs IPX to send a data packet.
  4794.  
  4795.           void IPXSendPacket( EVENT_CONTROL_BLOCK *ecb );
  4796.  
  4797.           Input:
  4798.              ecb:     Address of the ECB containing the routing information
  4799.                       and the data that is to be used in constructing the
  4800.                       packet.
  4801.  
  4802.  
  4803.  
  4804.  
  4805.  
  4806.  
  4807.  
  4808.  
  4809.  
  4810.  
  4811.  
  4812.  
  4813.  
  4814.  
  4815.  
  4816.  
  4817.  
  4818.  
  4819.  
  4820.  
  4821.  
  4822.  
  4823.  
  4824.  
  4825.  
  4826.  
  4827.  
  4828.  
  4829.  
  4830.  
  4831.  
  4832.                                                                                 
  4833. Netware C Library   Chapter Eleven - Communication Services          Page: 11-11
  4834. ────────────────────────────────────────────────────────────────────────────────
  4835.  
  4836. 11.5 SPX Functions
  4837.  
  4838.     11.5.1 SPXAbortConnection
  4839.  
  4840.           This function aborts an SPX connection by abnormally terminating any
  4841.           outstanding SPX events.  No notification of the termination is  sent
  4842.           to the other station.
  4843.  
  4844.           void SPXAbortConnection( word connectionID );
  4845.  
  4846.           Input:
  4847.              connectionID:   SPX connection id of the connection to be broken.
  4848.  
  4849.     11.5.2 SPXEstablishConnection
  4850.  
  4851.           This  function  creates a connection between the calling station and
  4852.           the specified  destination  station.   The  destination station must
  4853.           have issued an SPXListenForConnection.
  4854.  
  4855.           Before issuing this call, the application must have created at least
  4856.           two listen ECBs and passed them  to  SPX  by  calling  the  function
  4857.           SPXListenForSequencedPacket.   Once  the establish connection packet
  4858.           has been sent, then SPX will  use  one of the listen ECBs to receive
  4859.           an acknowledgement packet from the destination station.
  4860.  
  4861.           word SPXEstablishConnection( word retryCount, word watchdogFlag ,
  4862.                              EVENT_CONTROL_BLOCK *ecb ,word *connectionID );
  4863.  
  4864.           Input:
  4865.              retryCount:    This specifies how many times SPX will resend an
  4866.                             unacknowledged packet before giving up. A value of
  4867.                             zero indicates that SPX should use its internal
  4868.                             default value.
  4869.              watchdogFlag:  This can have the value of 0 (watchdog disabled)
  4870.                             or 1 (watchdog enabled). If watchdog is enabled
  4871.                             then the SPX watchdog process will monitor the SPX
  4872.                             connection to ensure that it is functioning. If
  4873.                             watchdog process determines that a connection has
  4874.                             failed, then it will use one of the outstanding
  4875.                             listen ECBs to report the failure.
  4876.              ecb:           Address of the ECB containing the information that
  4877.                             is required in order to establish the connection.
  4878.  
  4879.                             The socket number,  fragment  count  and  fragment
  4880.                             descriptor fields in the  ECB  must be setup.  The
  4881.                             fragment count field must be 1, and  the  fragment
  4882.                             descriptor  field  msut  point  to  a  42-byte SPX
  4883.                             packet header. The SPX packet header's destination
  4884.                             network node and socket number must be initialised
  4885.                             to their relevant values.
  4886.  
  4887.           Output:
  4888.              connectionID:  The returned SPX connection id.
  4889.  
  4890.           Returns:          Result code (see Appendix I)
  4891.  
  4892.                                                                                 
  4893. Netware C Library   Chapter Eleven - Communication Services          Page: 11-12
  4894. ────────────────────────────────────────────────────────────────────────────────
  4895.  
  4896.     11.5.3 SPXGetConnectionStatus
  4897.  
  4898.           This function returns the status of the specified SPX connection.
  4899.  
  4900.           word SPXGetConnectionStatus( word connectionID ,
  4901.                              SPX_CONNECTION_STATUS *connectionStatus );
  4902.  
  4903.           Input:
  4904.              connectionID:      SPX connection id.
  4905.  
  4906.           Output:
  4907.              connectionStatus:  Structure containing the status of the SPX
  4908.                                 connection. It is declared in the header file
  4909.                                 "ipxspx.h". See Appendix III.
  4910.  
  4911.           Returns:              Result code (see Appendix I)
  4912.  
  4913.     11.5.4 SPXInitialise
  4914.  
  4915.           This  function  determines  whether  SPX is installed.
  4916.  
  4917.           int SPXInitialise(byte *majorVersion,byte *minorVersion,
  4918.                             word *maxConnections,word *availableConnections );
  4919.  
  4920.           Output:
  4921.              majorVersion:          Major revision number of SPX.
  4922.              minorVersion:          Minor revision number of SPX.
  4923.              maxConnections:        Maximum number of SPX connections that
  4924.                                     are supported.
  4925.              availableConnections:  The number of SPX connections that are
  4926.                                     available.
  4927.  
  4928.           Returns:                  0     SPX is installed
  4929.                                     -1    SPX is not installed
  4930.  
  4931.     11.5.5 SPXListenForConnection
  4932.  
  4933.           This function instructs SPX to expect a request from another station
  4934.           to establish a connection.   SPX  returns immediately to the caller,
  4935.           and waits for the request packet in background.
  4936.  
  4937.           void SPXListenForConnection( word retryCount, word watchdogFlag ,
  4938.                                        EVENT_CONTROL_BLOCK *ecb );
  4939.  
  4940.           Input:
  4941.              retryCount:    This specifies how many times SPX will resend an
  4942.                             unacknowledged packet before giving up. A value of
  4943.                             zero indicates that SPX should use its internal
  4944.                             default value.
  4945.              watchdogFlag:  This can have the value of 0 (watchdog disabled)
  4946.                             or 1 (watchdog enabled). If watchdog is enabled
  4947.                             then the SPX watchdog process will monitor the SPX
  4948.                             connection to ensure that it is functioning. If
  4949.                             watchdog process determines that a connection has
  4950.                             failed, then it will use one of the outstanding
  4951.                             listen ECBs to report the failure.
  4952.                                                                                 
  4953. Netware C Library   Chapter Eleven - Communication Services          Page: 11-13
  4954. ────────────────────────────────────────────────────────────────────────────────
  4955.  
  4956.              ecb:           Address of the ECB containing the information that
  4957.                             is required in order to establish the connection.
  4958.  
  4959.                             The socket number,  fragment  count  and  fragment
  4960.                             descriptor fields in the  ECB  must be setup.  The
  4961.                             fragment count field must be 1, and  the  fragment
  4962.                             descriptor  field  msut  point  to  a  42-byte SPX
  4963.                             packet header.
  4964.  
  4965.                             When a connection is made, then SPX will return  a
  4966.                             connection  ID  in  the  first  two  bytes  of the
  4967.                             IPX_workspace field of the ECB associated with the
  4968.                             SPXListenForConnection call,  the driver_workspace
  4969.                             field will also contain the address of the partner
  4970.                             node.
  4971.  
  4972.     11.5.6 SPXListenForSequencedPacket
  4973.  
  4974.           This function gives SPX an ECB and a packet buffer it can  use  when
  4975.           it  receives  an  incoming data packet.  SPX will place each ECB and
  4976.           buffer in a pool and will then return immediately to the caller.  On
  4977.           receiving a  data  packet,  SPX  will  select  one  of the available
  4978.           listening ECBs for the relevant socket number.
  4979.  
  4980.           void SPXListenForSequencedPacket( EVENT_CONTROL_BLOCK *ecb );
  4981.  
  4982.           Input:
  4983.              ecb:    Address of the listening ECB.
  4984.  
  4985.                      The ecb should be initialised as follows:
  4986.  
  4987.                          fragment_count      = 2
  4988.  
  4989.                          fragment[0].address = Address of SPX header
  4990.                          fragment[0].length  = 42
  4991.  
  4992.                          fragment[1].address = Address of data buffer
  4993.                          fragment[1].length  = Length of data buffer
  4994.  
  4995.  
  4996.  
  4997.  
  4998.  
  4999.  
  5000.  
  5001.  
  5002.  
  5003.  
  5004.  
  5005.  
  5006.  
  5007.  
  5008.  
  5009.  
  5010.  
  5011.  
  5012.                                                                                 
  5013. Netware C Library   Chapter Eleven - Communication Services          Page: 11-14
  5014. ────────────────────────────────────────────────────────────────────────────────
  5015.  
  5016.     11.5.7 SPXSendSequencedPacket
  5017.  
  5018.           This function instructs SPX to send  a  data  packet  to  the  other
  5019.           station  associated  with the connection.  The actual send operation
  5020.           is performed in the background.
  5021.  
  5022.           void SPXSendSequencedPacket( word connectionID,
  5023.                                        EVENT_CONTROL_BLOCK *ecb );
  5024.  
  5025.           Input:
  5026.              connectionID:   SPX connection id.
  5027.              ecb:            Address of the send ecb.
  5028.  
  5029.                              The ecb should be initialised as follows:
  5030.  
  5031.                                  fragment_count      = 2
  5032.  
  5033.                                  fragment[0].address = Address of SPX header
  5034.                                  fragment[0].length  = 42
  5035.  
  5036.                                  fragment[1].address = Address of data buffer
  5037.                                  fragment[1].length  = Length of data buffer
  5038.  
  5039.     11.5.8 SPXTerminateConnection
  5040.  
  5041.           This  function  terminates  an   SPX  connection.   The  termination
  5042.           operation is performed in the background.  A termination packet will
  5043.           be sent to the partner station.
  5044.  
  5045.           void SPXTerminateConnection( word connectionID ,
  5046.                                        EVENT_CONTROL_BLOCK *ecb );
  5047.  
  5048.           Input:
  5049.              connectionID:   SPX connection id.
  5050.              ecb:            Address of the ecb.
  5051.  
  5052.                              The ecb should be initialised as follows:
  5053.  
  5054.                                  fragment_count      = 1
  5055.  
  5056.                                  fragment[0].address = Address of SPX header
  5057.                                  fragment[0].length  = 42
  5058.  
  5059.  
  5060.  
  5061.  
  5062.  
  5063.  
  5064.  
  5065.  
  5066.  
  5067.  
  5068.  
  5069.  
  5070.  
  5071.  
  5072.                                                                                 
  5073. Netware C Library      Appendix I - Netware Result Codes              Page: A1-1
  5074. ────────────────────────────────────────────────────────────────────────────────
  5075.  
  5076. ╔════╤═════════════════════════════════╦═════╤═══════════════════════════════╗
  5077. ║Hex │Meaning                          ║ Hex │Meaning                        ║
  5078. ╠════╪═════════════════════════════════╬═════╪═══════════════════════════════╣
  5079. ║00h │Action Successful                ║ 9Ah │Renaming Across Volumes        ║
  5080. ║    │Server Not In Use                ║ 9Bh │Bad Directory Handle           ║
  5081. ║    │TTS Not Available                ║ 9Ch │Invalid Path                   ║
  5082. ║01h │Server In Use                    ║     │No more Trustees               ║
  5083. ║    │Semaphore Overflow               ║ 9Dh │No More Directory Handles      ║
  5084. ║    │TTS Available                    ║ 9Eh │Invalid Filename               ║
  5085. ║02h │DOS File Not Found               ║ 9Fh │Directory Active               ║
  5086. ║03h │DOS Path Not Found               ║ A0h │Directory Not Empty            ║
  5087. ║04h │DOS Too Many Open Files          ║ A1h │Directory IO Error             ║
  5088. ║05h │DOS Access Denied                ║ A2h │Read File With Record Locked   ║
  5089. ║06h │DOS Invalid File Handle          ║ BBh │No Netware shell loaded        ║
  5090. ║07h │DOS Memory Blocks Destroyed      ║ C0h │No Account Privileges          ║
  5091. ║08h │DOS Insufficient Memory          ║ C1h │Login Denied -                 ║
  5092. ║09h │DOS Invalid Memory Block Address ║     │No Account Balance             ║
  5093. ║0Ah │DOS Invalid Environment          ║ C2h │Account Credit limit Exceeded  ║
  5094. ║0Bh │DOS Invalid Format               ║     │Login Denied - No credit       ║
  5095. ║0Ch │DOS Invalid Access Code          ║ C3h │Account - Too many Holds       ║
  5096. ║0Dh │DOS Invalid Data                 ║ C5h │Intruder Detection Lock        ║
  5097. ║0Fh │DOS Invalid Drive Specified      ║ C6h │Not Console Operator           ║
  5098. ║10h │DOS Attempt To Delete Current Dir║ D0h │Queue Error                    ║
  5099. ║11h │DOS Not Same Device              ║ D1h │No Queue                       ║
  5100. ║12h │DOS No More Files                ║ D2h │No Queue Server                ║
  5101. ║20h │DOS Sharing Violation            ║ D3h │No Queue Rights                ║
  5102. ║21h │DOS Lock Violation               ║ D4h │Queue Full                     ║
  5103. ║80h │File In User Error               ║ D5h │No Queue Job                   ║
  5104. ║81h │No More File Handles             ║ D6h │No Job Rights                  ║
  5105. ║82h │No Open Privileges               ║ D7h │Password Not Unique            ║
  5106. ║83h │IO Error Network Disk            ║     │Queue Servicing                ║
  5107. ║84h │No Create Privileges             ║ D8h │Password Too Short             ║
  5108. ║85h │No Delete Privileges             ║     │Queue Not Active               ║
  5109. ║86h │Create File Exists Read Only     ║ D9h │Login Denied - No connection   ║
  5110. ║87h │Wild Cards in Create File Name   ║     │Station Not Server             ║
  5111. ║88h │Invalid File Handle              ║ DAh │Unauthorized login time -      ║
  5112. ║89h │No Search Privileges             ║     │Queue Halted                   ║
  5113. ║8Ah │No Delete Privileges             ║ DBh │Unauthorized login station -   ║
  5114. ║8Bh │No Rename Privileges             ║     │Max Queue Servers              ║
  5115. ║8Ch │No Modify Privileges             ║ DCh │Account Disabled               ║
  5116. ║8Dh │Some Files Affected In Use       ║ DEh │Password has expired - No Grace║
  5117. ║8Eh │No Files Affected In Use         ║ DFh │Password has expired           ║
  5118. ║8Fh │Some Files Affected Read Only    ║ E8h │Not Item Property -            ║
  5119. ║90h │No Files Affected Read Only      ║     │Write Property to Group        ║
  5120. ║91h │Some Files Renamed - Name Exists ║ E9h │Member Already Exists          ║
  5121. ║92h │No Files Renamed - Name Exists   ║ EAh │No Such Member                 ║
  5122. ║93h │No Read Privileges               ║ EBh │Not Group Property             ║
  5123. ║94h │No Write Privileges or Read Only ║ ECh │No Such Segment                ║
  5124. ║95h │File Detached                    ║ EDh │Property Already Exists        ║
  5125. ║96h │Server Out Of Memory             ║ EEh │Object Already Exists          ║
  5126. ║    │Out Of Dynamic Workspace         ║ EFh │Invalid Name                   ║
  5127. ║97h │No Disk Space for Spool File     ║ F0h │Wild Card Not Allowed          ║
  5128. ║98h │Volume Does Not Exist            ║ F1h │Invalid Bindery Security       ║
  5129. ║99h │Directory Full                   ║ F2h │No Object Read Privilege       ║
  5130. ╚════╧═════════════════════════════════╩═════╧═══════════════════════════════╝
  5131.  
  5132.                                                                                 
  5133. Netware C Library      Appendix I - Netware Result Codes              Page: A1-2
  5134. ────────────────────────────────────────────────────────────────────────────────
  5135.  
  5136. ╔════╤═════════════════════════════════╦═════╤═══════════════════════════════╗
  5137. ║Hex │Meaning                          ║ Hex │Meaning                        ║
  5138. ╠════╪═════════════════════════════════╬═════╪═══════════════════════════════╣
  5139. ║F3h │No Object Rename Privilege       ║ FFh │Bad Printer Error              ║
  5140. ║F4h │No Object Delete Privilege       ║     │Bad Record Offset              ║
  5141. ║F5h │No Object Create Privilege       ║     │Close FCB Error                ║
  5142. ║F6h │No Property Delete Privilege     ║     │File Extension Error           ║
  5143. ║    │Not Same Local Drive             ║     │File Name Error                ║
  5144. ║F7h │No Property Create Privilege     ║     │Hardware Failure               ║
  5145. ║    │Target Drive Not Local           ║     │Invalid Drive Number           ║
  5146. ║F8h │Already Attached To Server       ║     │Invalid Initial Semaphore Value║
  5147. ║    │No Property Write Privilege      ║     │Invalid Semaphore Handle       ║
  5148. ║    │Not Attached To Server           ║     │IO Bound Error                 ║
  5149. ║F9h │No Free Connection Slots         ║     │No Files Found Error           ║
  5150. ║    │No Property Read Privilege       ║     │No Response From Server        ║
  5151. ║FAh │No More Server Slots             ║     │No Such Object                 ║
  5152. ║    │Temporary Remap Error            ║     │Bad Password                   ║
  5153. ║FBh │Invalid Parameters               ║     │Path Not Locatable             ║
  5154. ║    │No Such Property                 ║     │Queue Full Error               ║
  5155. ║    │Unknown Request                  ║     │Request Not Outstanding        ║
  5156. ║FCh │Unknown File Server              ║     │Transaction Not Yet Written    ║
  5157. ║    │Message Queue Full               ║     │No More Matching Files         ║
  5158. ║    │No Such Object                   ║     │Bindery Failure                ║
  5159. ║FDh │Bad Station Number               ║     │Explicit Transaction Active    ║
  5160. ║    │Unknown Request                  ║     │No Explicit Transaction Active ║
  5161. ║    │Field Already Locked             ║     │No Record Found                ║
  5162. ║    │TTS Disabled                     ║     │                               ║
  5163. ║FEh │Bindery Locked                   ║     │                               ║
  5164. ║    │Directory Locked                 ║     │                               ║
  5165. ║    │Invalid Semaphore Name Length    ║     │                               ║
  5166. ║    │Server Bindery Locked            ║     │                               ║
  5167. ║    │Spool Directory Error            ║     │                               ║
  5168. ║    │Supervisor has disabled login    ║     │                               ║
  5169. ║    │Timeout Failure                  ║     │                               ║
  5170. ║    │Transaction ends Record Lock     ║     │                               ║
  5171. ║    │Implicit Transaction Active      ║     │                               ║
  5172. ╚════╧═════════════════════════════════╩═════╧═══════════════════════════════╝
  5173.  
  5174.  
  5175.  
  5176.  
  5177.  
  5178.  
  5179.  
  5180.  
  5181.  
  5182.  
  5183.  
  5184.  
  5185.  
  5186.  
  5187.  
  5188.  
  5189.  
  5190.  
  5191.  
  5192.                                                                                 
  5193. Netware C Library         Appendix II - Function List                 Page: A2-1
  5194. ────────────────────────────────────────────────────────────────────────────────
  5195.  
  5196.     AddBinderyObjectToSet              Bindery Services             2.3.1
  5197.     AddTrusteeToDirectory              Directory Services           8.6.1
  5198.     AllocPermanentDirectoryHandle      Directory Services           8.6.2
  5199.     AllocTemporaryDirectoryHandle      Directory Services           8.6.3
  5200.     AttachToFileServer                 Connection Services          4.1.1
  5201.     BroadcastToConsole                 Message Services             6.1.1
  5202.     CancelLPTCapture                   Print Services               9.1.1
  5203.     CancelSpecificLPTCapture           Print Services               9.1.2
  5204.     ChangeBinderyObjectPassword        Bindery Services             2.3.2
  5205.     ChangeBinderyObjectSecurity        Bindery Services             2.3.3
  5206.     ChangePropertySecurity             Bindery Services             2.3.4
  5207.     CheckConsolePrivileges             File Server Services         3.1.1
  5208.     CheckPipeStatus                    Message Services             6.1.2
  5209.     ClearConnectionNumber              File Server Services         3.1.2
  5210.     CloseBindery                       Bindery Services             2.3.5
  5211.     CloseMessagePipe                   Message Services             6.1.3
  5212.     CloseSemaphore                     Synchronisation Services     10.2.1
  5213.     CreateBinderyObject                Bindery Services             2.3.6
  5214.     CreateDirectory                    Directory Services           8.6.4
  5215.     CreateProperty                     Bindery Services             2.3.7
  5216.     DeallocateDirectoryHandle          Directory Services           8.6.5
  5217.     DeleteBinderyObject                Bindery Services             2.3.9
  5218.     DeleteBinderyObjectFromSet         Bindery Services             2.3.8
  5219.     DeleteDirectory                    Directory Services           8.6.6
  5220.     DeleteFakeRoot                     Directory Services           8.6.7
  5221.     DeleteProperty                     Bindery Services             2.3.10
  5222.     DeleteTrusteeFromDirectory         Directory Services           8.6.8
  5223.     DetachFromFileServer               Connection Services          4.1.2
  5224.     DisableFileServerLogin             File Server Services         3.1.3
  5225.     DisableTransactionTracking         File Server Services         3.1.4
  5226.     DownFileServer                     File Server Services         3.1.5
  5227.     EnableFileServerLogin              File Server Services         3.1.6
  5228.     EnableTransactionTracking          File Server Services         3.1.7
  5229.     EncryptPassword                    File Server Services         3.1.8
  5230.     EndLPTCapture                      Print Services               9.1.3
  5231.     EndOfJob                           Workstation Services         5.2.1
  5232.     EndSpecificLPTCapture              Print Services               9.1.4
  5233.     EnterLoginArea                     Connection Services          4.1.3
  5234.     EraseFiles                         File Services                7.5.1
  5235.     ExamineSemaphore                   Synchronisation Services     10.2.2
  5236.     FlushLPTCapture                    Print Services               9.1.5
  5237.     FlushSpecificLPTCapture            Print Services               9.1.6
  5238.     GetBannerUserName                  Print Services               9.1.7
  5239.     GetBinderyAccessLevel              Bindery Services             2.3.11
  5240.     GetBinderyObjectDiskSpaceLeft      File Server Services         3.1.9
  5241.     GetBinderyObjectID                 Bindery Services             2.3.12
  5242.     GetBinderyObjectName               Bindery Services             2.3.13
  5243.     GetBroadcastMessage                Message Services             6.1.4
  5244.     GetBroadcastMode                   Message Services             6.1.5
  5245.     GetConnectionIDTable               Workstation Services         5.2.2
  5246.     GetConnectionInformation           Connection Services          4.1.4
  5247.     GetConnectionNumber                Connection Services          4.1.5
  5248.     GetConnectionsOpenFiles            File Server Services         3.1.10
  5249.     GetConnectionsUsageStatistics      File Server Services         3.1.11
  5250.     GetCurrentDirectory                Directory Services           8.6.9
  5251.     GetDefaultCaptureFlags             Print Services               9.1.10
  5252.                                                                                 
  5253. Netware C Library         Appendix II - Function List                 Page: A2-2
  5254. ────────────────────────────────────────────────────────────────────────────────
  5255.  
  5256.     GetDefaultConnectionID             Workstation Services         5.2.3
  5257.     GetDefaultLocalPrinter             Print Services               9.1.9
  5258.     GetDirectoryHandle                 Directory Services           8.6.10
  5259.     GetDirectoryPath                   Directory Services           8.6.11
  5260.     GetDiskCacheStatistics             File Server Services         3.1.12
  5261.     GetDiskUtilisation                 File Server Services         3.1.13
  5262.     GetDriveConnectionID               Workstation Services         5.2.4
  5263.     GetDriveFlagTable                  Workstation Services         5.2.5
  5264.     GetDriveHandleTable                Workstation Services         5.2.6
  5265.     GetEffectiveDirectoryRights        Directory Services           8.6.12
  5266.     GetFileServerDateTime              File Server Services         3.1.14
  5267.     GetFileServerInformation           File Server Services         3.1.15
  5268.     GetFileServerLoginStatus           File Server Services         3.1.16
  5269.     GetFileServerTable                 Workstation Services         5.2.7
  5270.     GetInternetAddress                 Connection Services          4.1.6
  5271.     GetLPTCaptureStatus                Print Services               9.1.8
  5272.     GetNetwareShellVersion             Workstation Services         5.2.8
  5273.     GetNetworkSerialNumber             File Server Services         3.1.17
  5274.     GetNumberOfLocalDrives             Workstation Services         5.2.9
  5275.     GetObjectConnectionNumbers         Connection Services          4.1.7
  5276.     GetPathFromDirectoryEntry          File Server Services         3.1.18
  5277.     GetPersonalMessage                 Message Services             6.1.6
  5278.     GetPhysicalDiskStatistics          File Server Services         3.1.19
  5279.     GetPreferredConnectionID           Workstation Services         5.2.10
  5280.     GetPrimaryConnectionID             Workstation Services         5.2.11
  5281.     GetPrinterStatus                   Print Services               9.1.11
  5282.     GetSemaphoreInformation            File Server Services         3.1.20
  5283.     GetServerConnectionID              Workstation Services         5.2.12
  5284.     GetSpecificCaptureFlags            Print Services               9.1.12
  5285.     GetStationAddress                  Connection Services          4.1.8
  5286.     GetVolumeInformation               Directory Services           8.6.13
  5287.     GetVolumeInfoWithHandle            Directory Services           8.6.14
  5288.     GetVolumeInfoWithNumber            Directory Services           8.6.15
  5289.     GetVolumeName                      Directory Services           8.6.16
  5290.     GetVolumeNumber                    Directory Services           8.6.17
  5291.     IsShellLoaded                      Workstation Services         5.2.13
  5292.     IPXCancelEvent                     Communication Services       11.4.1
  5293.     IPXCloseSocket                     Communication Services       11.4.2
  5294.     IPXDisconnectFromTarget            Communication Services       11.4.3
  5295.     IPXGetInternetworkAddress          Communication Services       11.4.4
  5296.     IPXGetIntervalMarker               Communication Services       11.4.5
  5297.     IPXGetLocalTarget                  Communication Services       11.4.6
  5298.     IPXInitialise                      Communication Services       11.4.7
  5299.     IPXListenForPacket                 Communication Services       11.4.8
  5300.     IPXOpenSocket                      Communication Services       11.4.9
  5301.     IPXRelinquishControl               Communication Services       11.4.10
  5302.     IPXScheduleIPXEvent                Communication Services       11.4.11
  5303.     IPXSendPacket                      Communication Services       11.4.12
  5304.     IsBinderyObjectInSet               Bindery Services             2.3.14
  5305.     LoginObjectEncrypted               Connection Services          4.1.9
  5306.     LoginToFileServer                  Connection Services          4.1.10
  5307.     LogNetworkMessage                  Message Services             6.1.7
  5308.     Logout                             Connection Services          4.1.12
  5309.     LogoutFromFileServer               Connection Services          4.1.11
  5310.     MapFakeRoot                        Directory Services           8.6.18
  5311.     ModifyMaximumRightsMask            Directory Services           8.6.19
  5312.                                                                                 
  5313. Netware C Library         Appendix II - Function List                 Page: A2-3
  5314. ────────────────────────────────────────────────────────────────────────────────
  5315.  
  5316.     OpenBindery                        Bindery Services             2.3.15
  5317.     OpenMessagePipe                    Message Services             6.1.8
  5318.     OpenSemaphore                      Synchronisation Services     10.2.3
  5319.     PurgeAllErasedFiles                File Services                7.5.2
  5320.     PurgeErasedFiles                   File Services                7.5.3
  5321.     ReadPropertyValue                  Bindery Services             2.3.16
  5322.     RenameBinderyObject                Bindery Services             2.3.17
  5323.     RenameDirectory                    Directory Services           8.6.20
  5324.     RestoreDirectoryHandle             Directory Services           8.6.21
  5325.     SaveDirectoryHandle                Directory Services           8.6.22
  5326.     ScanBinderyObject                  Bindery Services             2.3.18
  5327.     ScanBinderyObjectTrusteePaths      Directory Services           8.6.23
  5328.     ScanDirectoryForTrustees           Directory Services           8.6.24
  5329.     ScanDirectoryInformation           Directory Services           8.6.25
  5330.     ScanFileInformation                File Services                7.5.4
  5331.     ScanProperty                       Bindery Services             2.3.19
  5332.     SendBroadcastMessage               Message Services             6.1.9
  5333.     SendConsoleBroadcast               File Server Services         3.1.21
  5334.     SendPersonalMessage                Message Services             6.1.10
  5335.     SetBannerUserName                  Print Services               9.1.13
  5336.     SetBroadcastMode                   Message Services             6.1.11
  5337.     SetCapturePrintQueue               Print Services               9.1.14
  5338.     SetDefaultCaptureFlags             Print Services               9.1.16
  5339.     SetDefaultLocalPrinter             Print Services               9.1.15
  5340.     SetDirectoryHandle                 Directory Services           8.6.26
  5341.     SetEndofJobStatus                  Workstation Services         5.2.14
  5342.     SetNWErrorMode                     Workstation Services         5.2.15
  5343.     SetPreferredConnectionID           Workstation Services         5.2.16
  5344.     SetPrimaryConnectionID             Workstation Services         5.2.17
  5345.     SetSpecificCaptureFlags            Print Services               9.1.17
  5346.     SignalSemaphore                    Synchronisation Services     10.2.4
  5347.     SpecifyCaptureFile                 Print Services               9.1.18
  5348.     SPXAbortConnection                 Communication Services       11.5.1
  5349.     SPXEstablishConnection             Communication Services       11.5.2
  5350.     SPXGetConnectionStatus             Communication Services       11.5.3
  5351.     SPXInitialise                      Communication Services       11.5.4
  5352.     SPXListenForConnection             Communication Services       11.5.5
  5353.     SPXListenForSequencedPacket        Communication Services       11.5.6
  5354.     SPXSendSequencedPacket             Communication Services       11.5.7
  5355.     SPXTerminateConnection             Communication Services       11.5.8
  5356.     StartLPTCapture                    Print Services               9.1.19
  5357.     StartSpecificLPTCapture            Print Services               9.1.20
  5358.     VerifyBinderyObjectPassword        Bindery Services             2.3.20
  5359.     VerifyObjectPasswordEncrypted      Bindery Services             2.3.21
  5360.     WaitOnSemaphore                    Synchronisation Services     10.2.5
  5361.     WritePropertyValue                 Bindery Services             2.3.22
  5362.  
  5363.  
  5364.  
  5365.  
  5366.  
  5367.  
  5368.  
  5369.  
  5370.  
  5371.  
  5372.                                                                                 
  5373. Netware C Library        Appendix III - Data Structures               Page: A3-1
  5374. ────────────────────────────────────────────────────────────────────────────────
  5375.  
  5376.     These are the structures  that  are  used  by  some  of the Netware calls.
  5377.     Elements within them that have types nw_long or nw_int must  be  converted
  5378.     using convertNWlong or convertNWint respectively.
  5379.  
  5380.     All the structures are declared in the  header  files  provided  with  the
  5381.     libraries.
  5382.  
  5383. A3.1 CONNECTION_ID_TABLE
  5384.  
  5385.     This is used by GetConnectionIDTable in the Workstation Services.
  5386.  
  5387.     typedef struct {   byte    slot_in_use;
  5388.                        byte    servers_order_number;
  5389.                        byte    servers_network_number[4];
  5390.                        byte    physical_node_address[6];
  5391.                        nw_int  socket_number;
  5392.                        word    receive_timeout;
  5393.                        byte    routers_physical_node_address[6];
  5394.                        byte    packet_sequence_number;
  5395.                        byte    connection_number;
  5396.                        byte    connection_status;
  5397.                        word    maximum_time_out;
  5398.                        word    connection_word;
  5399.                        byte    major_server_version;
  5400.                        byte    server_flags;
  5401.                        byte    minor_server_version;  } CONNECTION_ID_TABLE;
  5402.  
  5403.     slot_in_use:                   A zero value indicates that this slot is
  5404.                                    not in use, possible non-zero values are:
  5405.                                           0xe0 = AES Temporary Indicator
  5406.                                           0xf8 = IPX in critical process
  5407.                                           0xfa = Processing
  5408.                                           0xfb = Holding (in processing after
  5409.                                                           an event occurred)
  5410.                                           0xfc = AES Waiting
  5411.                                           0xfd = Waiting
  5412.                                           0xfe = Receiving
  5413.                                           0xff = Sending
  5414.     servers_order_number:          This is the order number assigned to the
  5415.                                    corresponding server. The server with the
  5416.                                    lowest network/node address has the lowest
  5417.                                    order number. This will be a value 1 - 8.
  5418.     servers_network_number:        This identifies the network which the file
  5419.                                    server is attached. If the server is
  5420.                                    attached to more than one LAN then this
  5421.                                    will always be for the servers LAN A.
  5422.     physical_node_address:         This is the address of the servers LAN
  5423.                                    board.
  5424.     socket_number:                 The socket the shell uses for communicating
  5425.                                    with the server.
  5426.     receive_timeout:               How long the shell should wait before
  5427.                                    resending an unanswered request. This is
  5428.                                    adjusted dynamically by the shell, but will
  5429.                                    never exceed the value in maximum_time_out.
  5430.     routers_physical_node_address: This is the address of the preferred bridge
  5431.                                    to route requests through, if it is not a
  5432.                                                                                 
  5433. Netware C Library        Appendix III - Data Structures               Page: A3-2
  5434. ────────────────────────────────────────────────────────────────────────────────
  5435.  
  5436.                                    direct connection.
  5437.     packet_sequence_number:        This is used as a packet ID to check that
  5438.                                    the reply received is answering the last
  5439.                                    request.
  5440.     connection_number:             This corresponds to the entry in the file
  5441.                                    servers connection table.
  5442.                                           0xff = No Connection.
  5443.     connection_status:             This is the status of the connection.
  5444.                                           0x00 = Connection functioning
  5445.     maximum_time_out:              This is the maximum length of time that
  5446.                                    the shell should wait before resending
  5447.                                    an unanswered request.
  5448.     connection_word:               2-byte connection number, use this instead
  5449.                                    of connection_number.
  5450.     major_server_version:          Major version number, less 2, of the
  5451.                                    corresponding server.
  5452.     server_flags:                  Low order bit will be set if burst mode is
  5453.                                    enabled.
  5454.     minor_server_version:          Minor version number of the corresponding
  5455.                                    server.
  5456.  
  5457.  
  5458.  
  5459.  
  5460.  
  5461.  
  5462.  
  5463.  
  5464.  
  5465.  
  5466.  
  5467.  
  5468.  
  5469.  
  5470.  
  5471.  
  5472.  
  5473.  
  5474.  
  5475.  
  5476.  
  5477.  
  5478.  
  5479.  
  5480.  
  5481.  
  5482.  
  5483.  
  5484.  
  5485.  
  5486.  
  5487.  
  5488.  
  5489.  
  5490.  
  5491.  
  5492.                                                                                 
  5493. Netware C Library        Appendix III - Data Structures               Page: A3-3
  5494. ────────────────────────────────────────────────────────────────────────────────
  5495.  
  5496. A3.2 DISK_CACHE_STATISTICS
  5497.  
  5498.     This is used  by  GetDiskCacheStatistics  in  the  File Server Environment
  5499.     Services.
  5500.  
  5501.     typedef struct {   word    buffer_length;
  5502.                        nw_long system_elapsed_time;
  5503.                        nw_int  cache_buffer_count;
  5504.                        nw_int  cache_buffer_size;
  5505.                        nw_int  dirty_cache_buffers;
  5506.                        nw_long cache_read_requests;
  5507.                        nw_long cache_write_requests;
  5508.                        nw_long cache_hits;
  5509.                        nw_long cache_misses;
  5510.                        nw_long physical_read_requests;
  5511.                        nw_long physical_write_requests;
  5512.                        nw_int  physical_read_errors;
  5513.                        nw_int  physical_write_errors;
  5514.                        nw_long cache_get_requests;
  5515.                        nw_long cache_full_write_requests;
  5516.                        nw_long cache_partial_write_requests;
  5517.                        nw_long background_dirty_writes;
  5518.                        nw_long background_aged_writes;
  5519.                        nw_long total_cache_writes;
  5520.                        nw_long cache_allocations;
  5521.                        nw_int  thrashing_count;
  5522.                        nw_int  LRU_block_was_dirty;
  5523.                        nw_int  read_beyond_write;
  5524.                        nw_int  fragmented_write_occurred;
  5525.                        nw_int  cache_hit_unavail_block;
  5526.                        nw_int  cache_block_scrapped;  } DISK_CACHE_STATISTICS;
  5527.  
  5528.     buffer_length:              Length of structure - 2
  5529.     system_elapsed_time:        This is the number of clock ticks, since the
  5530.                                 server was loaded. Each clock tick = 1/18th
  5531.                                 second approx. When this reaches 0xffffffff
  5532.                                 it wraps back to zero.
  5533.     cache_buffer_count:         The number of cache buffers in the server.
  5534.     cache_buffer_size:          Number of bytes in a cache buffer.
  5535.     dirty_cache_buffers:        Number of buffers containing data that has
  5536.                                 not yet been written to disk.
  5537.     cache_read_requests:        Number of times the cache software was asked
  5538.                                 to read some data.
  5539.     cache_write_requests:       Number of times the cache software was asked
  5540.                                 to write some data.
  5541.     cache_hits:                 Number of times cache requests were available
  5542.                                 in existing cache blocks.
  5543.     cache_misses:               Number of times cache requests were not
  5544.                                 available in cache blocks.
  5545.     physical_read_requests:     Number of actual reads on the disk the cache
  5546.                                 software actioned.
  5547.     physical_write_requests:    Number of actual writes to the disk the cache
  5548.                                 software actioned.
  5549.     physical_read_errors:       Number of errors the cache software received
  5550.                                 whilst reading from the disk.
  5551.     physical_write_errors:      Number of errors the cache software received
  5552.                                                                                 
  5553. Netware C Library        Appendix III - Data Structures               Page: A3-4
  5554. ────────────────────────────────────────────────────────────────────────────────
  5555.  
  5556.                                 whilst writing to the disk.
  5557.     cache_get_requests:         The number of times the cache software was
  5558.                                 asked to read information from the disk.
  5559.     cache_full_write_requests:  The number of times the cache software was
  5560.                                 told to write information that exactly
  5561.                                 filled one or more sectors.
  5562.     cache_partial_write_requests:
  5563.                                 The number of times the cache software was
  5564.                                 told to write information that didn't exactly
  5565.                                 fill one or more sectors, this requires a
  5566.                                 disk pre-read.
  5567.     background_dirty_writes:    The number of times that a whole cache block
  5568.                                 was completely written to a disk.
  5569.     background_aged_writes:     Number of times a partially filled cache
  5570.                                 block was written to a disk, because it had
  5571.                                 not been accessed for a period of time.
  5572.     total_cache_writes:         Total number of cache buffers written to disk.
  5573.     cache_allocations:          Number of times a cache block was allocated
  5574.                                 for use.
  5575.     thrashing_count:            Number of times a cache block was not
  5576.                                 available when a block allocation was
  5577.                                 requested.
  5578.     LRU_block_was_dirty:        Number of times the least recently used (LRU)
  5579.                                 cache block algorithm reclaimed a dirty cache
  5580.                                 block.
  5581.     read_beyond_write:          Number of times a file read request was made
  5582.                                 when file writes had not yet filled the cache
  5583.                                 block.
  5584.     fragmented_write_occurred:  Number of dirty cache blocks that contained
  5585.                                 non-contiguous sectors of information were
  5586.                                 written, and the skipped sectors were not
  5587.                                 pre-read from the disk, this requires
  5588.                                 multiple disk writes.
  5589.     cache_hit_unavail_block:    Number of cache requests that could be
  5590.                                 serviced from an available cache block, but
  5591.                                 the cache buffer could not be used, because
  5592.                                 it was in the process of being written to or
  5593.                                 read from the disk.
  5594.     cache_block_scrapped:       The number of times a cache blocked is
  5595.                                 scrapped. This is due to the process going to
  5596.                                 sleep whilst it is waiting for a spare cache
  5597.                                 block, but when it wakes the data it was
  5598.                                 requesting has been read into another cache
  5599.                                 block by another process. This process has
  5600.                                 to then scrap the cache block it was waiting
  5601.                                 for and use the block that already contains
  5602.                                 the data.
  5603.  
  5604.  
  5605.  
  5606.  
  5607.  
  5608.  
  5609.  
  5610.  
  5611.  
  5612.                                                                                 
  5613. Netware C Library        Appendix III - Data Structures               Page: A3-5
  5614. ────────────────────────────────────────────────────────────────────────────────
  5615.  
  5616. A3.3 FILE_SERVER_INFO
  5617.  
  5618.     This is used by GetFileServerInformation in the  File  Server  Environment
  5619.     Services.
  5620.  
  5621.     typedef struct {   char   server_name[48];
  5622.                        byte   netware_version;
  5623.                        byte   netware_subversion;
  5624.                        nw_int connections_supported;
  5625.                        nw_int connections_in_use;
  5626.                        nw_int max_connected_volumes;
  5627.                        byte   os_revision;
  5628.                        byte   SFT_level;
  5629.                        byte   TTS_level;
  5630.                        nw_int peak_connections_used;
  5631.                        byte   accounting_version;
  5632.                        byte   VAP_version;
  5633.                        byte   queuing_version;
  5634.                        byte   print_server_version;
  5635.                        byte   virtual_console_version;
  5636.                        byte   security_restrictions_level;
  5637.                        byte   internet_bridge_version;
  5638.                        byte   reserved[60];           } FILE_SERVER_INFO;
  5639.  
  5640.     server_name[48]:            48-byte null terminated name of the server.
  5641.     netware_version:            Version of Netware (1-255).
  5642.     netware_subversion:         Sub-version of Netware (0-99).
  5643.     connections_supported:      Number of connections supported.
  5644.     connections_in_use:         Number of connections currently in use.
  5645.     max_connected_volumes:      Maximum number of volumes on the server.
  5646.     os_revision:                The revision number of the Operating System.
  5647.     SFT_level:                  System Fault Tolerance level.
  5648.     TTS_level:                  Transaction Tracking System level.
  5649.     peak_connections_used:      Maximum number of connections that have been
  5650.                                 made since the server was loaded.
  5651.     accounting_version:         The accounting version that is being used.
  5652.     VAP_version:                The Value Added Process version number.
  5653.     queuing_version:            The Queuing version number.
  5654.     print_server_version:       The Print Server version number.
  5655.     virtual_console_version:    The Virtual Console version number.
  5656.     security_restrictions_level:
  5657.                                 The security restrictions level.
  5658.     internet_bridge_version:    The Internetwork Bridge version number.
  5659.     reserved[60]:               Currently undefined.
  5660.  
  5661.  
  5662.  
  5663.  
  5664.  
  5665.  
  5666.  
  5667.  
  5668.  
  5669.  
  5670.  
  5671.  
  5672.                                                                                 
  5673. Netware C Library        Appendix III - Data Structures               Page: A3-6
  5674. ────────────────────────────────────────────────────────────────────────────────
  5675.  
  5676. A3.4 PHYSICAL_DISK_STATISTICS
  5677.  
  5678.     This is used by  GetPhysicalDiskStatistics  in the File Server Environment
  5679.     Services.
  5680.  
  5681.     typedef struct {   word    buffer_length;
  5682.                        nw_long system_elapsed_time;
  5683.                        byte    physical_disk_channel;
  5684.                        byte    drive_removable_flag;
  5685.                        byte    physical_drive_type;
  5686.                        byte    controller_drive_number;
  5687.                        byte    controller_number;
  5688.                        byte    controller_type;
  5689.                        nw_long drive_size;
  5690.                        nw_int  drive_cylinders;
  5691.                        byte    drive_heads;
  5692.                        byte    sectors_per_track;
  5693.                        char    drive_definition_string[64];
  5694.                        nw_int  io_error_count;
  5695.                        nw_long hot_fix_table_start;
  5696.                        nw_int  hot_fix_table_size;
  5697.                        nw_int  hot_fix_blocks_available;
  5698.                        byte    hot_fix_disabled;   } PHYSICAL_DISK_STATISTICS;
  5699.  
  5700.     buffer_length:              Length of structure - 2.
  5701.     system_elapsed_time:        This is the number of clock ticks, since the
  5702.                                 server was loaded. Each clock tick = 1/18th
  5703.                                 second approx. When this reaches 0xffffffff
  5704.                                 it wraps back to zero.
  5705.     physical_disk_channel:      The disk channel the disk is attached to.
  5706.     drive_removable_flag:       A non-zero value indicates this drive is
  5707.                                 removable.
  5708.     physical_drive_type:        The type of drive:
  5709.                                         1=XT, 2=AT, 3=SCSI,
  5710.                                         4=disk coprocessor,
  5711.                                         5=PS/2 MFM controller,
  5712.                                         6=PS/2 ESDI controller,
  5713.                                         7=Convergent Technology SBIC,
  5714.                                         50 to 255=Value-added disk drive.
  5715.     controller_drive_number:    Drive number of the disk relative to the
  5716.                                 controller number.
  5717.     controller_number:          The address on the physical disk channel of
  5718.                                 the disk's controller.
  5719.     controller_type:            Contains a number indicating the type,
  5720.                                 make and model of the controller.
  5721.     drive_size:                 Size of the disk in blocks, 1 block = 4096
  5722.                                 bytes. This does not include the area of the
  5723.                                 disk reserved for Hot Fix.
  5724.     drive_cylinders:            Number of cylinders on the drive.
  5725.     drive_heads:                Number of heads on the drive.
  5726.     sectors_per_track:          The number of sectors on each track.
  5727.                                 1 sector = 512 bytes.
  5728.     drive_definition_string:    64-byte null terminated string holding
  5729.                                 the make and model of the drive.
  5730.     io_error_count:             This is the number of I/O errors on the disk
  5731.                                 since the server was loaded.
  5732.                                                                                 
  5733. Netware C Library        Appendix III - Data Structures               Page: A3-7
  5734. ────────────────────────────────────────────────────────────────────────────────
  5735.  
  5736.     hot_fix_table_start:        This is the first block of the Hot Fix area
  5737.                                 on the disk.
  5738.     hot_fix_table_size:         Number of blocks in the Hot Fix area.
  5739.     hot_fix_blocks_available:   Number of unused blocks in the Hot Fix area.
  5740.     hot_fix_disabled:           A non-zero value indicates that Hot Fix
  5741.                                 redirection is disabled.
  5742.  
  5743.  
  5744.  
  5745.  
  5746.  
  5747.  
  5748.  
  5749.  
  5750.  
  5751.  
  5752.  
  5753.  
  5754.  
  5755.  
  5756.  
  5757.  
  5758.  
  5759.  
  5760.  
  5761.  
  5762.  
  5763.  
  5764.  
  5765.  
  5766.  
  5767.  
  5768.  
  5769.  
  5770.  
  5771.  
  5772.  
  5773.  
  5774.  
  5775.  
  5776.  
  5777.  
  5778.  
  5779.  
  5780.  
  5781.  
  5782.  
  5783.  
  5784.  
  5785.  
  5786.  
  5787.  
  5788.  
  5789.  
  5790.  
  5791.  
  5792.                                                                                 
  5793. Netware C Library        Appendix III - Data Structures               Page: A3-8
  5794. ────────────────────────────────────────────────────────────────────────────────
  5795.  
  5796. A3.5 PRINT_CONTROL_DATA
  5797.  
  5798.     This is used by the Print Services: GetDefaultCaptureFlags,
  5799.                                         GetSpecificCaptureFlags,
  5800.                                         SetDefaultCaptureFlags,
  5801.                                         SetSpecificCaptureFlags.
  5802.  
  5803.     typedef struct {   byte     Status;
  5804.                        byte     PrintFlags;
  5805.                        byte     TabSize;
  5806.                        byte     ServerPrinter;
  5807.                        byte     NumberCopies;
  5808.                        byte     FormType;
  5809.                        byte     Reserved1;
  5810.                        byte     BannerText[13];
  5811.                        byte     Reserved2;
  5812.                        byte     LocalLPTDevice;
  5813.                        nw_int   FlushTimeoutCounter;
  5814.                        byte     FlushOnClose;
  5815.                        nw_int   MaximumLines;
  5816.                        nw_int   MaximumChars;
  5817.                        byte     FormName[13];
  5818.                        byte     LPTFlag;
  5819.                        byte     FileFlag;
  5820.                        byte     TimeoutFlag;
  5821.                        nw_long  SetupBufferAddress;
  5822.                        nw_long  ResetBufferAddress;
  5823.                        byte     ConnectIdQPrintJob;
  5824.                        byte     InProgress;
  5825.                        byte     PrintQFlag;
  5826.                        byte     PrintJobValid;
  5827.                        nw_long  PrintQID;
  5828.                        nw_int   PrintJobNumber;  } PRINT_CONTROL_DATA;
  5829.  
  5830.     Status:             This is always set to 0x00
  5831.     PrintFlags:         This includes the following bits:
  5832.  
  5833.                           (MSB) Bit   7: The banner page is printed
  5834.                                       6: Tab size plus other print control
  5835.                                          sequences, will be interpreted by the
  5836.                                          server's print process.
  5837.                                     5-4: Not specified
  5838.                                       3: The server's print service will
  5839.                                          suppress the automatic form feed at
  5840.                                          the end of the print job
  5841.                                       2: The print job is released for
  5842.                                          printing if the capture is broken by
  5843.                                          the connection to the server being
  5844.                                          lost.
  5845.                                       1: Not specified
  5846.                           (LSB)       0: Not specified
  5847.  
  5848.     TabSize:             Current tab size (1-18)
  5849.     ServerPrinter:       Printer number on which the captured file will be
  5850.                          printed (0-4).
  5851.  
  5852.                                                                                 
  5853. Netware C Library        Appendix III - Data Structures               Page: A3-9
  5854. ────────────────────────────────────────────────────────────────────────────────
  5855.  
  5856.     NumberCopies:        Number of copies to print (0-255)
  5857.     FormType:            The type of form that must be mounted in the printer
  5858.                          for this file to be printed (0-255).
  5859.     Reserved1:           Undefined
  5860.     BannerText[13]:      13-byte string that will be printed on the bottom
  5861.                          half of a banner page. If this is null then the
  5862.                          capture file name will be printed.
  5863.     Reserved2:           Undefined
  5864.     LocalLPTDevice:      The default LPT device (0-2,0=LPT1)
  5865.     FlushTimeoutCounter: This starts counting down every time an INT 17h is
  5866.                          executed. When the timeout expires the capture file
  5867.                          is flushed (0-65535).
  5868.     FlushOnClose:        If this is zero (enabled) then the server will flush
  5869.                          the capture file when the program ends the capture of
  5870.                          the default LPT device. A non-zero value indicates
  5871.                          this is disabled.
  5872.     MaximumLines:        The maximum lines per page.
  5873.     MaximumChars:        The maximum characters per line.
  5874.     FormName[13]:        The name of the form that must be mounted in the
  5875.                          printer for this file to print.
  5876.     LPTFlag:             This is set (0xff) when the capture of the default
  5877.                          LPT device is started, and cleared (0x00) when it is
  5878.                          ended.
  5879.     FileFlag:            This is et (0xff) when a capture filename is
  5880.                          specified, but cleared (0x00) when one has not been
  5881.                          specified.
  5882.     TimeoutFlag:         This is set (0xff) when the timeout counter is
  5883.                          counting down, and cleared (0x00) when it isn't.
  5884.     SetupBufferAddress:  This points to a buffer containing the printer setup
  5885.                          string. The buffer size is stored in the first word.
  5886.     ResetBufferAddress:  This points to a buffer containing the printer reset
  5887.                          string. The buffer size is stored in the first word.
  5888.     ConnectIdQPrintJob:  This is the connection ID of the server queuing the
  5889.                          print job.
  5890.     InProgress:          This is set (0xff) when the first character of the
  5891.                          print job is sent to the default LPT device. It is
  5892.                          cleared (0x00) when then capture is ended,flushed or
  5893.                          cancelled.
  5894.     PrintQFlag:          This is set (0xff) when the print queue job entry is
  5895.                          placed in the print queue. It is cleared (0x00) when
  5896.                          the capture is ended, or cancelled.
  5897.     PrintJobValid:       This is set (0xff) whilst the capture file is open,
  5898.                          and cleared (0x00) when the capture is ended,
  5899.                          cancelled or flushed.
  5900.     PrintQID:            This is the bindery object ID of the print queue on
  5901.                          the target server.
  5902.     PrintJobNumber:      This is the job number the Queue Management System
  5903.                          assigns to a print queue job entry.
  5904.  
  5905.  
  5906.  
  5907.  
  5908.  
  5909.  
  5910.  
  5911.  
  5912.                                                                                 
  5913. Netware C Library        Appendix III - Data Structures              Page: A3-10
  5914. ────────────────────────────────────────────────────────────────────────────────
  5915.  
  5916. A3.6 VOLUME_STATISTICS
  5917.  
  5918.     This is used by GetVolumeInformation in the Directory Services.
  5919.  
  5920.     typedef struct {   word    buffer_length;
  5921.                        nw_long system_elapsed_time;
  5922.                        byte    volume_number;
  5923.                        byte    logical_drive_number;
  5924.                        nw_int  sectors_per_block;
  5925.                        nw_int  starting_block;
  5926.                        nw_int  total_blocks;
  5927.                        nw_int  available_blocks;
  5928.                        nw_int  total_directory_slots;
  5929.                        nw_int  available_directory_slots;
  5930.                        nw_int  max_used_dir_entries;
  5931.                        byte    volume_is_hashed;
  5932.                        byte    volume_is_cached;
  5933.                        byte    volume_is_removable;
  5934.                        byte    volume_is_mounted;
  5935.                        char    volume_name[17];        } VOLUME_STATISTICS;
  5936.  
  5937.     buffer_length:              Length of structure - 2
  5938.     system_elapsed_time:        This is the number of clock ticks, since the
  5939.                                 server was loaded. Each clock tick = 1/18th
  5940.                                 second approx. When this reaches 0xffffffff
  5941.                                 it wraps back to zero.
  5942.     volume_number:              This identifies the volume in the servers
  5943.                                 Volume Table.
  5944.     logical_drive_number:       This is the volumes logical drive number on
  5945.                                 the server.
  5946.     sectors_per_block:          This is the number of 512-byte sectors held
  5947.                                 in each block.
  5948.     starting_block:             The number of the first block of the volume.
  5949.     total_blocks:               Total number of blocks on the volume.
  5950.     available_blocks:           Total number of unused blocks on the volume.
  5951.     total_directory_slots:      Total number of directory slots allocated for
  5952.                                 the volume at installation time.
  5953.     available_directory_slots:  Total number of unused directory slots.
  5954.     max_used_dir_entries:       Maximum directory slots used at any one time
  5955.                                 on the volume.
  5956.     volume_is_hashed:           A non-zero value indicates that the volume is
  5957.                                 hashed in the servers memory.
  5958.     volume_is_cached:           A non-zero value indicates that the volume is
  5959.                                 cached in the servers memory.
  5960.     volume_is_removable:        A non-zero value indicates that the disk that
  5961.                                 holds the volume is removable.
  5962.     volume_is_mounted:          A non-zero value indicates that the volume is
  5963.                                 mounted.
  5964.     volume_name[17]:            The 17-byte null terminated volume name
  5965.  
  5966.  
  5967.  
  5968.  
  5969.  
  5970.  
  5971.  
  5972.                                                                                 
  5973. Netware C Library        Appendix III - Data Structures              Page: A3-11
  5974. ────────────────────────────────────────────────────────────────────────────────
  5975.  
  5976. A3.7 SPX_CONNECTION_STATUS
  5977.  
  5978.     This is used by SPXGetConnectionStatus in the Communication Services.
  5979.  
  5980.     typedef struct { byte   connection_state;
  5981.                      byte   watchdog_is_on;
  5982.                      nw_int local_connection_id;
  5983.                      nw_int remote_connection_id;
  5984.                      nw_int sequence_number;
  5985.                      nw_int local_acknowledge_number;
  5986.                      nw_int local_allocation_number;
  5987.                      nw_int remote_acknowledge_number;
  5988.                      nw_int remote_allocation_number;
  5989.                      nw_int local_socket;
  5990.                      byte   immediate_address[6];
  5991.                      byte   network_number[4];
  5992.                      byte   node_address[6];
  5993.                      nw_int socket;
  5994.                      nw_int retransmission_count;
  5995.                      nw_int est_roundtrip_delay;
  5996.                      nw_int retransmitted_packets;
  5997.                      nw_int suppressed_packets;      } SPX_CONNECTION_STATUS;
  5998.  
  5999.     connection_state:           Current state of the connection.
  6000.  
  6001.                                         0x01  Waiting. SPX is listening on the
  6002.                                               connection, waiting for an
  6003.                                               establish connection packet.
  6004.                                         0x02  Starting. SPX is attempting to
  6005.                                               make a connection by sending
  6006.                                               establish connection packets.
  6007.                                         0x03  Established. SPX has established
  6008.                                               a connection with a remote
  6009.                                               workstation.
  6010.                                         0x04  Terminating. The remote work-
  6011.                                               station has terminated the
  6012.                                               connection.
  6013.  
  6014.     watchdog_is_on:             If bit 1 is set, then the watchdog process is
  6015.                                 monitoring the connection.
  6016.     local_connection_id:        The SPX connection id of this workstation.
  6017.     remote_connection_id:       The SPX connection id of the remote station.
  6018.     sequence_number:            The sequence number that the local SPX will
  6019.                                 assign to the next packet that it sends. This
  6020.                                 is incremented each time a packet is sent.
  6021.                                 When it reaches 0xffff it wraps back to zero.
  6022.     local_acknowledge_number:   The sequence number of the next packet that
  6023.                                 the local SPX expects to receive.
  6024.     local_allocation_number:    This is the number of outstanding listen ECBs
  6025.                                 that are available for the local SPX. The
  6026.                                 remote SPX is allowed to send packets with
  6027.                                 sequence numbers up to and including the
  6028.                                 local_allocation_number. This number is
  6029.                                 incremented as the local workstation generates
  6030.                                 listen ECBs. When this number reaches 0xffff
  6031.                                 it wraps back to zero.
  6032.                                                                                 
  6033. Netware C Library        Appendix III - Data Structures              Page: A3-12
  6034. ────────────────────────────────────────────────────────────────────────────────
  6035.  
  6036.     remote_acknowledge_number:  This is the sequence number of the next packet
  6037.                                 that the remote SPX expects to receive from
  6038.                                 the local SPX.
  6039.     remote_allocation_number:   This is the number of outstanding listen ECBs
  6040.                                 that are available to the remote SPX. The
  6041.                                 local SPX is allowed to send packets with
  6042.                                 sequence numbers up to and including the
  6043.                                 remote_allocation_number. This number is
  6044.                                 incremented as the remote station generates
  6045.                                 listen ECBs. When this number reaches 0xffff
  6046.                                 it wraps back to zero.
  6047.     local_socket:               This is the socket number that the local SPX
  6048.                                 is using to send and receive packets.
  6049.     immediate_address[6]:       This is the address of the bridge that routes
  6050.                                 the packets to and from the remote station. If
  6051.                                 the loacl and remote stations are on the same
  6052.                                 local network, then this is the address of the
  6053.                                 remote station.
  6054.     network_number[4]:          The network number that the remote station is
  6055.                                 on.
  6056.     node_address[6]:            The node address of the remote station.
  6057.     socket:                     The socket number that the remote station is
  6058.                                 using to send and receive packets.
  6059.     retransmission_count:       The number of times that SPX will attempt to
  6060.                                 resend an unacknowledged packet before it
  6061.                                 determines that the remote half of the
  6062.                                 connection is no longer responding.
  6063.     est_roundtrip_delay:        This is the number of clock ticks that the
  6064.                                 local SPX will wait for before resending
  6065.                                 a packet.
  6066.     retransmitted_packets:      The number of times that the local SPX has
  6067.                                 had to resend a packet for this connection.
  6068.     suppressed_packets:         The number of packets that have been discarded
  6069.                                 by the local SPX, possibly due to a duplicate
  6070.                                 packet being received.
  6071.  
  6072.  
  6073.  
  6074.  
  6075.  
  6076.  
  6077.  
  6078.  
  6079.  
  6080.  
  6081.  
  6082.  
  6083.  
  6084.  
  6085.  
  6086.  
  6087.  
  6088.  
  6089.  
  6090.  
  6091.  
  6092.                                                                                 
  6093. Netware C Library           Appendix IV - Order Form                  Page: A4-1
  6094. ────────────────────────────────────────────────────────────────────────────────
  6095.  
  6096.                                   Return to:    Adrian Cunnelly
  6097.                                                 18 Kingsley Avenue,
  6098.                                                 Heaton Norris,
  6099.                                                 Stockport,
  6100.                                                 Cheshire.
  6101.                                                 SK4 1PW
  6102.                                                 ENGLAND
  6103.  
  6104. Name:       __________________________________________________
  6105.  
  6106. Company:    __________________________________________________
  6107.  
  6108. Address:    __________________________________________________
  6109.  
  6110.             __________________________________________________
  6111.  
  6112.             __________________________________________________
  6113.  
  6114.             __________________________________________________
  6115.  
  6116. Phone:      __________________________________________________
  6117.  
  6118.  
  6119. Diskette size (Select one): [___] 5.25" 1.2mb
  6120.                             [___] 5.25" 360k
  6121.                             [___] 3.5"  1.44mb
  6122.                             [___] 3.5"  720k
  6123.  
  6124. Registration..................................£10      £____
  6125.           ( inc. Large,Medium & Small memory models,
  6126.             for Microsoft C 6.0 , Turbo C 2.0 &
  6127.             Borland C++ 2.0 )
  6128.  
  6129. Registration + Source code....................£40      £____
  6130.  
  6131. Printed manual.........................[  ] @ £10 each £____
  6132.  
  6133. Total..................................................£____ (UK Pounds)
  6134.  
  6135. All the above prices include postage and packing.
  6136.  
  6137. All funds must be in UK Pounds.
  6138.  
  6139.  
  6140.  
  6141.  
  6142.  
  6143.  
  6144.  
  6145.  
  6146.  
  6147.  
  6148.  
  6149.  
  6150.  
  6151.  
  6152.                                                                                 
  6153.